2012-04-19 49 views
3

我想從NSLogging遍地移動到使用斷點記錄性能影響並不排除它的地方。Xcode 4.3斷點記錄對象描述

我知道我可以只po調試器命令操作的對象,我知道我可以只通過choosign的日誌消息行動記錄任何字符串。

我認爲我應該能夠通過選擇日誌消息並輸入類似SomeText giving context for object description: @(const char *)[[anObject description] UTF8String]@這樣的結合。不幸的是,這似乎不起作用,並總是給我我所假設的指向描述字符串的指針。

我在做什麼錯?

回答

2

這有點棘手,但我認爲這會奏效。設置斷點動作作爲調試器命令。然後使用以下文本作爲動作:

po (NSString *) [@"Some text describing: " stringByAppendingString:(NSString *)[anObject description]] 

在調試器中工作時,必須非常小心地使用返回類型。 GDB和LLDB都有。

我喜歡使用斷點來避免性能下降的想法,但這也意味着只有在連接到調試器時纔會打印日誌。而NSLogs將緩存他們的輸出到系統日誌,可以從Xcode中的Organizer(Devices)查看。

+0

謝謝,這聽起來像一個可行的解決方案(即使它不*直接*回答記錄操作發生了什麼)。實際上,根據我的經驗,斷點記錄要比使用NSLog慢很多,但有時候,我不想將NSLog全部噴到我的源代碼中。 – fzwo 2012-05-03 17:46:38

+0

也許有比我能回答更多的東西?我希望你在帖子中表達的結果只是一個指針。我發佈的代碼是否可以幫助您實現相同的目標,並且您正在尋找不同的方式來實現它? – Sam 2012-05-03 19:09:23

+0

我已經授予您賞金,因爲它解決了我用斷點記錄遇到的實際問題。我認爲我的問題中的表達式會打印一個字符串,而不僅僅是指向字符串的指針。 – fzwo 2012-05-05 23:37:52

1

(編輯:我錯過了問題的角度,它不是一個答案)

我認爲這是最好使用DebugLog。這是一個,你可以很容易地禁用它(當你在調試版本中def -ine DEBUG時它是打開的,當你不是define時它是關閉的)。所以,沒有性能下降(恰恰相反)。

只需更換

NSLog(@"Hello, World!"); 

DebugLog(@"Hello, World!"); 

而不是

19/4/12 8:55:52.949 PM Dictionary: Hello, World! 

您將獲得:

BetterDictionary.m:737 Hello, World! 

(它顯示的文件,甚至該行已登錄的話)

這是無限更有趣。 undefine DEBUG爲您的生產構建和DebugLog將不會被稱爲在所有

而且別忘了#import 'DebugLog.h'

+1

感謝您的建議,但那並不能真正回答我的問題。 – fzwo 2012-04-19 16:30:37

+4

@fzwo是的,我在提交答案後立即明白了我已經完全錯過了這個問題的觀點,並且即將刪除它,您評論過......但我會把它留在這裏,因爲這可能對其他人來說可能是新的它。 – 2012-04-19 16:32:59