OSX下lldb调试疑问:print无输出但消息框显示结果,如何获取值?
解决lldb print命令无预期输出的问题
问题原因
你调试的应该是Objective-C/Swift程序,lldb的print(缩写p)和gdb的print行为存在差异:
- gdb的
print对于对象会直接输出其可读内容; - lldb的
print默认只打印变量的底层类型、内存地址,不会主动调用对象的内容展示方法,所以看起来像“没输出”,实际是输出了指针信息,而消息框显示的是对象的字符串化结果。
正确获取值的方法
针对Objective-C/Swift对象:使用
po(print object的缩写)命令,示例:po your_variable_name这个命令会调用对象的
description(OC)或description/debugDescription(Swift)方法,输出和消息框一致的可读内容。针对基础数据类型(int、float等):直接用
print或p命令即可,和gdb行为一致:print int_variable p float_variable适配gdb使用习惯:如果想让
p命令和gdb的print一样自动处理对象,可以给lldb设置别名:command alias p po设置后输入
p your_variable就会自动调用对象的内容展示。
gdb到lldb常用命令对应
帮你快速过渡:
- gdb
run→ lldbr - gdb
break <位置>→ lldbb <位置> - gdb
next→ lldbn - gdb
step→ lldbs - gdb
continue→ lldbc
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

