2011-11-09 43 views
14

今天一直在觀看有關xCode 4中的新功能的WWDC視頻。他們提到,在斷點上使用日誌消息操作以及「評估操作後自動繼續」可以輸出變量的值,而不是使用NSLogs所有的時間。如何在xcode中創建斷點的日誌消息動作?

可以說我有這樣的事情:

NSLog(@"URL is : %@", userDocumentsURL); 

我怎麼會寫日誌信息的行動,以顯示userDocumentsURL的價值?使用上面的方法而不是NSLog真的是個好主意嗎?

回答

25

創建一個斷點'記錄消息'動作。對於日誌消息包括像:

URL is @(char*) [[userDocumentsURL description] UTF8String]@ 

或者,您也可以創建一個斷點「調試程序命令」行動相似:

po [NSString stringWithFormat:@"URL is: %@", userDocumentsURL] 

我更喜歡使用記錄斷點行動,因爲它可以說是比較容易清除出來一堆斷點比刪除NSLogs。以這種方式使用斷點的一個可能的缺點是它們比直接的NSLog慢得多(在調試過程中)。

+4

我希望我知道爲什麼:調試器是如此愚蠢到要求char * cast和b:它沒有工作一半的時間和c:蘋果文檔沒有說清楚你需要char *和d:爲什麼它沒有抱怨如果變量不存在幫助你調試。與甚至沒有這種功能的Java的Eclipse斷點相比,應該更差,但允許您通過將打印放入條件來破解它。這是令人討厭的日食,但即便如此,仍然更容易,因爲打印不需要特殊的轉換,它會停下來,並告訴你有關錯誤 – Rhubarb

-3

我注意到編輯斷點功能儘管有用,也許是現代的,但並未提交到源代碼控制,因此不會擴展到開發人員團隊。出於這個原因,我會說當在源代碼控制下的團隊工作時堅持使用基於代碼的日誌記錄,如NSLog。

+4

我相信如果你在斷點編輯器中選擇正確的共享選項。我自己並不使用這個功能(獨立開發者),但WWDC會談表明,共享與源代碼控制集成在一起。 – mbm29414

+12

在我看來,不要被迫讀其他團隊成員的所有調試輸出是一個親。在提交之前,您不必清理NSLog(或NSLog前的//)。我曾參與過一個團隊,其中十分之一的提交是「刪除日誌記錄」,「添加了更多的NSLog」,「NSLog更改/更少冗長」或任何其他與日誌相關的提交。 –

+0

像@MatthiasBauch剛剛發表評論這可能也是有用的。另一方面,您應該知道,有一些用戶不想重新啓動應用程序,但希望在調試器中看到日誌,因此這將是唯一可行的方法。 –

19

這是一個類似的解決方案,使用NSLog,這可能比其他解決方案的字符少。

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