2009-04-12 69 views
17

我有一个断点动作,并使用下拉菜单中的日志选项。我想打印出字符串(摘要)值。我这样做:如何在Xcode 4中打印来自断点动作的字符串值?

the person name is: @[email protected] 

但打印内存地址。我可以切换到调试器命令选项,并做

po f.name 

但我失去了我的描述,在第一个选项中使用。使用日志选项,是否有打印字符串值而不是内存地址的方法?

回答

17

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

如果你想你的日志要复杂的多,你可以做更多的东西是这样的:

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

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

+1

对我来说,简直的XCode忽略不管我型。调试器的类型是否重要(即GDB/LLDB)? – futureelite7 2012-06-26 01:09:20

+1

@ futureelite7 GDB和LLDB都应该能够做到这一点。你可以尝试使用“Expression”动作而不是“Log Message”,然后在那里使用“NSLog”。因此,在“表达式”窗口中,您应该输入如下内容:'(void)NSLog(@“记录此变量:%@”,aVariable);' – 2012-06-26 03:52:39

+1

@JasonCoco Xcode 4.6中似乎没有表达式操作。 – Snowcrash 2013-03-07 14:23:36

4

我结束了对同一个断点使用2个不同的动作。首先是一个日志,然后是一个带po varName的调试器命令。只有不足之处,它会打印在2个不同的行。

enter image description here

+0

您可以使用一个动作,像Jason建议的 – Philip007 2012-12-07 10:40:37

26

可以使用的NSLog语句使用 “调试器命令” 断点,但你需要添加 “EXPR”

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

-

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

+1

这有我迷惑了一下,在你的表达式中,你使用的是“而不是”引号,在Xcode中它们看起来几乎是一样的,对于其他任何人,当它在那里时,它在程序中给出了这个错误'error:unexpected'@' '。 – Mike 2013-05-09 00:56:09

+0

感谢Mike;我没有注意到这一点,它必须在我复制/粘贴表达式时被自动替换,修复它 – auco 2013-05-09 10:16:45

7

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

debugger command using NSlog

但是,除非你加void这样的:

po (void)NSLog(@"the person name is: %@", p.name) 

你会得到一个恼人的 “无” 与您记录打印出来。例如:

(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 

如果你可以用无生活(我可以)它的速度更快输入和更容易记住只是po

+0

我试过多次使用@ expr @语法,但很少成功。一个非常简单的解决方法,谢谢! – LunaCodeGirl 2014-11-29 21:47:07