breakpoints && lldb  && chisel 的使用

本文详细介绍了iOS调试中的Breakpoint分类,包括Normal、Exception、OpenGL ES Error、Symbolic和Test Failure Breakpoint,以及Watchpoints。深入讲解了LLDB的常用命令,如help、expression、print、call和bt,以及解决中文兼容、类型问题和找不到方法等常见问题。同时,文章也探讨了Chisel这一强大的LLDB增强工具,为iOS开发者提供更高效的调试体验。
摘要由CSDN通过智能技术生成

Breakpoints


BreakPoint分类


breakpoint也是有分类的,我这里的文章内大致按使用的方式分为了 Normal Breakpoint,Exception Breakpoint,OpenGL ES Error breakpoint,Symbolic Breakpoint,Test Failure Breakpoint,WatchPoints。可以按具体的情景使用不同类型的breakpoint,解决问题为根本。

Normal Breakpoint


添加普通断点就不多说了,在源代码的右侧点击一下即可。或者,使用快捷键:command + \ 来添加和删除。这两种方式添加的breakpoints在Xcode上面是可以通过UI看到的。

还有可以通过下面两个LLDB命令直接在运行时添加断点,但是这种方式需要注意的是一方面无法通过UI直接看到断点,另外一方面只存在于本次运行,下一次启动模拟器重新运行的时候,这些断点就不生效了。

如上图,通过“br li”命令打印所有的breakpoint,可以看到一共有3个breakpoint,第一个是通过Xcode的UI添加的,后面两个分别是通过下面两个命令添加的:
“breakpoint set -f XXX.m -l XX” 和  “b XXX.m:XX”。


Exception Breakpoint


可以通过下图中Xcode的UI添加Exception Breakpoint。有时候,比如数组越界或者设置一个空对象等问题,都会抛出一个异常,但是这种类型的错误非常难以定位,这个时候就可以使用Exception Breakpoint来进行调试,在异常发生时可以捕捉到并停止程序的执行。OC中的异常是一个常被忽略的地方,但实际上系统框架内这个使用非常广泛,大部分这种错误信息,系统框架都会以异常的形式throw出来,所以善用这种breakpoint的话,我们能大大减少查找错误的时间。


例如,当我们添加如下Exception Breakpoint之后(bt 命令后文中会讲解,这个命令的作用是在断点触发时,打印回调栈信息):

类似下面这样的数组越界的问题,我们可以很容易就定位到问题所在,不用再毫无头绪找来找去了:


当断点暂停执行时,我们可以通过Xcode的UI中查看调用栈信息:

或者查看bt命令打印的调用栈信息:



还有类似如下的错误可以通过这种断点很容易定位到:
,不过这种问题,可以通过使用setValue:forKey:代替来避免。


OpenGL ES Error Breakpoint

同上图中,在Xcode的breakpoint navigator的下部添加按钮,选择”Add OpenGL ES Error Breakpoint”即可。这个breakpoint主要是用来在OpenGL ES发生错误时停止程序的运行。


Symbolic Breakpoint

通过Xcode的UI添加symbolic breakpoint的方式同exception breakpoint,弹出框如下:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值