Xcode调试小技巧

来源:互联网 发布:自己在知乎匿名 编辑:程序博客网 时间:2024/05/21 11:02

1. LLDB常用调试命令

LLDB是XCode内置的为我们开发者提供的调试工具,可以在设置断点的时候在控制台中输入相关的lldb命令进行调试。

p :用于输出基本类型

(lldb) p cell(HomeSupplyOrBiddingCollectionViewCell *) $0 = 0x00007fa7cedb27f0

po :用于输出 Objective-C 对象

(lldb) po cell<HomeSupplyOrBiddingCollectionViewCell: 0x7fa7cedb27f0; baseClass = UICollectionViewCell; frame = (0 2500.5; 375 56); layer = <CALayer: 0x60400082cf20>>

expression(简写为expr):可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。

bt:打印调用堆栈

(lldb) bt* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 6.1  * frame #0: 0x000000010cb6e1b8 CementPlatform`-[CMHomeViewController collectionView:cellForItemAtIndexPath:](self=0x00007fa7ced06000, _cmd="collectionView:cellForItemAtIndexPath:", collectionView=0x00007fa7cf103000, indexPath=0xc000000000000216) at CMHomeViewController.m:305    frame #1: 0x0000000110b2c5ea UIKit`-[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 290    frame #2: 0x0000000110b2e4a0 UIKit`-[UICollectionView _prefetchItemsForVelocity:maxItemsToPrefetch:invalidateCandidatesOnDirectionChanges:] + 598......

call:调用的意思

(lldb) call [self.view setBackgroundColor:[UIColor redColor]]

继续运行程序可以看到view的背景颜色变成红色的了

image:命令可用于寻址,有多个组合命令。比较实用的用法是用于寻找栈地址对应的代码位置。

更多命令参考 https://lldb.llvm.org/lldb-gdb.html

2. 流程控制

  • continue : 继续执行下去到达下一个断点(process continue),或者使用缩写 c
  • next : 单步执行到下一个语句(process step-over),缩写 n
  • step : 跳进一个函数调试(process step-into),缩写 s
  • finish : 继续执行到下一个断点或返回语句,然后再次停止(process step-out)
  • return : 会在当前断点处直接返回出函数,函数剩余部分不会被执行(process )

3. 断点管理

设置断点触发条件

断点可以设置条件,只有当条件满足时,才会进入断点,并且可以设置进入断点时执行某些操作,比如打印log,执行lldb命令等。

这种应用场景主要是在循环遍历时,想要断点跟踪就只能通过这种方式了,除非添加NSLog打印,但是这种需要手动添加代码,在调试时才想到要添加一些打印语句,这时候又得重新运行,这太慢了,所以懂得设置断点触发条件将会大大提高效率。

断点触发条件(打印log)

断点触发条件(执行lldb命令)

原创粉丝点击