xcode gdb/lldb调试命令

81 篇文章 0 订阅
常见错误:lldb error: property not found on object of type的解决

场景描述:
断点位置:CGRect frame = view.frame;
当我在控制台:使用lldb命令会出现这么几种情况:

1,我输入:po frame可以正常得到对象
(lldb) po frame
(origin = (x = 0, y = 0), size = (width = 200, height = 100))
 (origin = (x = 0, y = 0), size = (width = 200, height = 100))
2,我输入:po view.frame则会报以下错误
(lldb) po view.frame
error: property 'frame' not found on object of type 'UIView *'
error: 1 errors parsing expression
3,我输入:p (CGRect)[view frame]才能正确得到想要的结果
print (CGRect)[view frame]
(CGRect) $1 = (origin = (x = 0, y = 0), size = (width = 200, height = 100))

其实现在 在lldb调试中
详细参考地址

附上常用命令:

命令                        解释    

break NUM               在指定的行上设置断点。    

bt                      显示所有的调用栈帧。该命令可用来显示函数的调用顺序。    

clear                   删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。    

continue                继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。    

display EXPR            每次程序停止后显示表达式的值。表达式由程序定义的变量组成。    

file FILE               装载指定的可执行文件进行调试。    

help NAME               显示指定命令的帮助信息。    

info break              显示当前断点清单,包括到达断点处的次数等。    

info files              显示被调试文件的详细信息。    

info func               显示所有的函数名称。    

info local              显示当函数中的局部变量信息。    

info prog               显示被调试程序的执行状态。    

info var                显示所有的全局和静态变量名称。    

kill                    终止正被调试的程序。    

list                    显示源代码段。    

make                    在不退出 gdb 的情况下运行 make 工具。    

next                    在不单步执行进入其他函数的情况下,向前执行一行源代码。    

print EXPR              显示表达式 EXPR 的值。     

print-object            打印一个对象    

print (int) name      打印一个类型    

print-object [artist description]   调用一个函数    

set artist = @"test"    设置变量值    

whatis                  查看变理的数据类型   

这里提到了简写


这里重点强调一个命令:

expr :可在运行时修改变量的值!(多么牛逼的作用)

你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模式后,使用expr命令即可在运行时修改变量的值。
假如有一个loginWithUsername:方法,需要两个参数:username,password。
首先设置好断点,如下图所示:

这里写图片描述

运行app,进入断点模式后,在(lldb)后输入
expr username = @"username"
expr password = @"badpassword"
控制台会返回以下信息
(NSString *) $0 = 0x3d3504c4 @"username"
(NSString *) $1 = 0x1d18ef60 @"badpassword"
现在跳出断点,执行断点之后的两条输出语句,控制台会有以下输出
(0x1c59aae0) A line for the breakpoint
(0x1c59aae0) Username and Password after: username:badpassword
看到看吧,我们在运行时修改了变量的值,事情还可以变的更简单一些,我们可以编辑断点,让它自动填充需要的修改的变量的值,并且可以选择在此断点处不进入断点模式,仅仅修改指定变量的值,然后自动执行后续代码。
右击断点选择“Edit Breakpoint…”(或者按住cmd+option,单击断点),然后如下图所示设置断点

这里写图片描述

注意选中了最后一行(“Automatically continue after evaluating”)的选择框,这就保证运行到这个断点的时,填充变量的值,然后继续运行,并不在此处断点进入调试模式。
运行app,你会得到和上述手动设置变量的值一样的输出。
接下来单击断点,使其处于禁用状态,现在箭头的颜色应该是浅蓝色的,重新运行app,你会发现username和password的值没有在运行时被改变了。
参考链接

好了这是我常用的一些,如果大家还有什么使用技巧可以留言补充!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值