21

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

the person name is: @p.name@

但这会打印内存地址。我可以切换到调试器命令选项并执行

po f.name

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

4

6 回答 6

28

您可以使用“调试器命令”将 NSLog 语句与断点一起使用,但您需要添加“expr”

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

-

在 Xcode 4.4 中使用带有调试器命令的 expr 命令作为断点

于 2012-07-28T11:17:23.677 回答
19

您可以做几件事。从下拉列表中添加一个 Log 函数,然后添加另一个框并选择Debugger Command并输入po f.name

如果你想让你的日志更复杂,你可以做更多这样的事情:

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

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

于 2009-04-12T21:38:47.840 回答
8

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

使用 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

于 2013-06-19T21:36:24.513 回答
5

我最终对同一个断点使用了 2 个不同的操作。首先是一个日志,然后是一个带有 po varName 的调试器命令。唯一的缺点是它将打印在 2 个不同的行中。

在此处输入图像描述

于 2012-03-06T12:19:00.477 回答
0

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

在此处输入图像描述

于 2018-11-03T09:38:13.937 回答
0

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

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

在此处输入图像描述

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

但是要记住,运行这些需要一些时间,因此对于时间很重要的操作,这些并不好。

于 2020-11-18T06:26:56.683 回答