如何从Xcode 4中的断点操作打印字符串值?

时间:2009-04-12 21:23:27

标签: iphone xcode gdb debugging

我有一个断点操作,并使用下拉列表中的Log选项。我想打印出字符串(摘要)值。我这样做:

the person name is: @p.name@

但打印内存地址。我可以切换到Debugger Command选项并执行

po f.name

然后我丢失了我的描述,如第一个选项中所使用的那样。使用Log选项,有没有办法打印字符串值而不是内存地址?

6 个答案:

答案 0 :(得分:26)

您可以使用带有断点的NSLog语句使用“Debugger Command”,但是您需要添加“expr”

expr (void)NSLog(@"The Person Name is %@", p.name)

-

using expr command with a Debugger Command as breakpoint in Xcode 4.4

答案 1 :(得分:18)

你可以做几件事。从下拉列表中添加日志功能,然后添加另一个框并选择Debugger Command并输入po f.name

如果您希望日志更复杂,可以执行以下操作:

the person name is: @(const char *)[(NSString*)[p.name description] UTF8String]@

您最好的选择可能只是使用调试器的图形界面来监视变量。如果要记录消息,请使用NSLog

答案 2 :(得分:8)

这是一个只使用一个操作的解决方案,并且使用的字符少于expr解决方案。

debugger command using NSlog

但是,除非您像这样添加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个不同的行中打印。

enter image description here

答案 4 :(得分:0)

您不需要在断点中执行两次操作,您只需执行 ONE 命令(日志消息),即可在其中放置包含变量内容的消息(参见图片)。通过单击“自动继续”,它的行为就像在代码中包含一条打印命令,但是好在那,那么您的代码中就没有打印语句。

enter image description here

答案 5 :(得分:0)

对于Swift和Xcode 12.2,您可以双击断点,并将Debugger Command用作操作和命令,而无论您通常在调试器上的时间如何。

在示例中,我将po与字符串作为参数(以避免打印内存地址)一起使用,其中包含我正在调试的值。我还启用了Automatically continue...以避免停止执行。

enter image description here

您还可以添加其他文本或其他变量。

要记住的是,运行这些需要花费一些时间,因此对于时间很重要的操作来说,这些效果不好。