2009-04-12 71 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