Xcode调试、性能优化基本工具使用简单整理

发布于 1月3日  约 3 分钟

断点

1. 普通断点

在行号那儿点一下就加上了,最常用的断点,略。

2. 条件断点

很多时候问题代码是被高频调用直到特定条件下才出现问题的,这种时候可以使用条件断点。

在任意断点右击选择Edit Breakpoint即可编辑条件。

3. 符号断点

有时候我们没有源码只有头文件,不方便加普通断点,可以使用符号断点。在断点界面点击 + ,选择Ad Symbolic Breakpoint,即可添加符号断点。

4. 异常断点

抛出Objc异常时的断点,由于Objc能捕获异常的场景非常少,因此用处比较有限。

LLDB常用命令

  1. p/po(print/print object)

    • 打印一个值/对象
  2. call

    • 调用一个方法并输出返回值
  3. expr

    • 执行一个表达式,常用于运行时改变数据,构造特定场景
  4. bt

    • 打印当前堆栈信息

更多参考iOS——调试工具LLDB学习

僵尸对象

用于对野指针问题的分析。

野指针问题导致的crash堆栈往往千奇百怪,其根本原因是对象被释放后,对应的内存是不确定什么时候会被覆盖多少的,造成后面访问时可能正常也可能crash。

僵尸对象就是消除这种不确定性的方法,在对象被释放时,会生成一个僵尸类,把对应内存中的isa替换掉,指向这个僵尸类。这样在通过野指针访问这个对象时就可以100%捕获了。

此功能可以在“Edit Scheme…” —> “Run” —> “Diagnostics” —> “Zombie Objects”中打开,应当只在debug时使用,对性能影响比较大。

Address Sanitizer

Address Sanitizer是个更底层一点的手段,僵尸对象只对Objc对象的野指针有效,而Address Sanitizer可以检查任意内存访问错误的问题。典型场景如C的数组越界。

Time Profile

Time Profile用于检测CPU使用耗时,方便优化性能问题。

如果某个操作存在性能问题,可以在操作前,开启Time Profile Record,操作后Stop。Time Profile会记下期间所有方法的CPU耗时,并从高到低排列。于是就可以方便地找到耗性能的瓶颈进行针对性地优化。

Allocations

Allocations工具用于分析内存问题。

在应用启动后,特定操作前后进行打点,即可看到期间所有的内存增长来源。

对于可复现的内存问题非常方便定位。

阅读 772发布于 1月3日

推荐阅读
二师兄的博客
用户专栏

个人博客,希望这次能多写点

3 人关注
41 篇文章
专栏主页
目录