我有一个断点操作,并使用下拉列表中的Log选项。我想打印出字符串(摘要)值。我这样做:
the person name is: @p.name@
但打印内存地址。我可以切换到Debugger Command选项并执行
po f.name
然后我丢失了我的描述,如第一个选项中所使用的那样。使用Log选项,有没有办法打印字符串值而不是内存地址?
答案 0 :(得分:26)
您可以使用带有断点的NSLog语句使用“Debugger Command”,但是您需要添加“expr”
expr (void)NSLog(@"The Person Name is %@", p.name)
-
答案 1 :(得分:18)
你可以做几件事。从下拉列表中添加日志功能,然后添加另一个框并选择Debugger Command
并输入po f.name
。
如果您希望日志更复杂,可以执行以下操作:
the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@
您最好的选择可能只是使用调试器的图形界面来监视变量。如果要记录消息,请使用NSLog
。
答案 2 :(得分:8)
这是一个只使用一个操作的解决方案,并且使用的字符少于expr
解决方案。
但是,除非您像这样添加void
:
po (void)NSLog(@"the person name is: %@", p.name)
你的日志会打印出令人讨厌的“nil”。例如:
(lldb) po NSLog(@"foo")
nil
2013-06-19 14:42:59.025 TheMove[95864:c07] foo
(lldb) po (void)NSLog(@"foo")
2013-06-19 14:43:10.758 TheMove[95864:c07] foo
如果你可以忍受nil(我可以),输入更快,更容易记住po
答案 3 :(得分:4)
我最终为同一个断点使用了2个不同的动作。首先是一个Log,然后是一个带有po varName的调试器命令。唯一的缺点是它将在2个不同的行中打印。
答案 4 :(得分:0)
您不需要在断点中执行两次操作,您只需执行 ONE 命令(日志消息),即可在其中放置包含变量内容的消息(参见图片)。通过单击“自动继续”,它的行为就像在代码中包含一条打印命令,但是好在那,那么您的代码中就没有打印语句。
答案 5 :(得分:0)