美文网首页
iOS Debug方式总结

iOS Debug方式总结

作者: Jason1226 | 来源:发表于2021-07-09 22:23 被阅读0次
常用lldb指令:

print, p: 打印值,后续可以通过$方式获取值
po: print object缩写,打印对象值(对象调用description并输出)
p/x,p/t: /x代表16进制输出,/t代表2进制输出(常用 p/x &变量 16进制输出地址值)
p/c,p/s: /c打印字符,/s打印字符串
p arr = @[@"12", @"34"]: 调试时实时修改变量值
x 0x600001ca4030: 输出地址的值
memory read 0x600001ca4030: 读取内存地址值
memory write:修改内存地址的值
register read 0x600001ca4030:读取寄存器
register write:写入寄存器
help: 列出所有命令
bt: 显示堆栈信息
register read:查看寄存器
image list:查看工程中可执行image和依赖的共享库image
dis -s +地址: 反汇编地址
recursiveDescription:递归打印subViews

全局断点:

在程序出错的时候定位到崩溃的那一行代码。


全局断点
条件断点:

通过设置断点的Condition,满足条件才会进入断点。


当obj != nil进入断点

其中的Automatically continue after evaluation actions.默认未勾选,选中代表进入断点后不会停住程序,可配合设置action在进入断点后执行一些操作,这在调试时不希望停住程序的场景非常有用。

符号断点Symbolic breakpoint:

你可以在里面添加例如 -[NSArray objectAtIndex:]这样的符号断点。这样每次调用这个函数的时候,程序都会停止,不管是你调用还是苹果调用。

符号断点
僵尸对象:

Xcode可以把那些已经release掉得对象,变成“僵尸”(并没有真正释放),当我们访问一个Zombie对象时,Xcode可以告诉我们正在访问的对象是一个不应该存在的对象了,因为没有真正释放,可以提供给我们详情的僵尸对象错误信息,方便开发者定位问题。在打包的时候,一定要记住关闭僵尸对象,避免内存浪费。

内存查看(View Memory):

通过View Memory查看以内存地址的方式查看内存数据。
需要注意的是,iOS使用的都是小端模式(从内存中高地址开始读数据)。


查看内存
反汇编查看

通过选中Always Show Disassembly打开反汇编查看。
首行是当前执行到的模块,下面是汇编指令。其中callq指函数调用,j开头指跳转(JUMP),syscall指调用系统内核函数。

反汇编查看

相关lldb指令:
s(step)单步执行一行oc代码。(遇到函数调用进入)
si(stepi)单单步执行一行汇编代码,i代表instruction指令。(遇到函数调用进入)
n(next)单步执行一行oc代码。
ni(nexti)单单步执行一行汇编代码。

相关文章

网友评论

      本文标题:iOS Debug方式总结

      本文链接:https://www.haomeiwen.com/subject/mukcpltx.html