调试

断点和调试器交互

help命令

  • help 列出所有命令
  • help <commond>列出某个命令更多细节,例如help print</commond>

print

  • print 打印需要查看的变量,例如print totalCount
  • print 还能使用简写prin, pri, p
  • po(print object)可以打印对象的description方法的结果
  • 打印不同格式可以用p/x number打印十六进制,p/t number打印二进制,p/c char打印字符。这里是完整清单https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html

expression

  • expression 可以改变一个值,例如expression s
  • expression可以使用e来代替
  • e -p — dataArray 也可以打印对象的description方法的结果,等同于po

流程控制

  • continue会取消暂停,继续执行下去到达下一个断电,LLDB中使用process continue,别名continue,或者使用缩写c
  • step over会执行当前这个函数,然后继续。LLDB中使用thread step-over,next或者缩写n
  • step into指跳进一个函数调试。LLDB中使用thread step in,step或者s
  • step out会继续执行到下一个返回语句,然后再次停止
  • thread return会在当前断点处直接返回出函数,函数剩余部分不会被执行。LLDB中使用thread return NO

断点管理

  • breakpoint list可以看到所有断点,简写br li
  • breakpoint set可以创建断点,缩写br

在LLDB执行C/Objective-C/C++/Swift

  • 除了创建函数,类,block等其它的都可以做到
  • 使用e进行操作,p进行打印显示结果

在调试器中直接更新UI


(lldb) e id $myView = (id)0x7f82b1d01fd0

(lldb) e (void)[$myView setBackgroundColor:[UIColor blueColor]]

(lldb) e (void)[CATransaction flush]

查找Button的target

查看按钮按下后谁会接收到按钮发出的action


(lldb) po [$myButton allTargets]

{(

<MagicEventListener: 0x7fb58bd2e240>

)}

(lldb) po [$myButton actionsForTarget:(id)0x7fb58bd2e240 forControlEvent:0]

<__NSArrayM 0x7fb58bd2aa40>(

_handleTap:

)

观察实例变量变化

想监视vMain变量什么时候被重写了,监视这个地址什么时候被写入


(lldb) p (ptrdiff_t)ivar_getOffset((struct Ivar *)class_getInstanceVariable([MyView class], "vMain"))

(ptrdiff_t) $0 = 8

(lldb) watchpoint set expression -- (int *)$myView + 8

Watchpoint created: Watchpoint 3: addr = 0x7fa554231340 size = 8 state = enabled type = w

new value: 0x0000000000000000

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 LLDB全称 [ Low Level Debugger ], 默认内置于Xcode中的动态调试工具。标准...
    Superman168阅读 15,360评论 2 19
  • [转]浅谈LLDB调试器文章来源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc阅读 2,599评论 2 6
  • 一句话介绍LLDB:内置在 Xcode 中的调试器。能在特定的位置暂停程序运行,并观察变量的值,也可以执行自定义指...
    厨子阅读 337评论 0 0
  • LLDB是XCode内置的为我们开发者提供的调试工具,可以在设置断点的时候在控制台中输入相关的lldb命令进行调试...
    jumpingfrog0阅读 2,772评论 0 1
  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1阅读 970评论 0 4