2011-09-21 66 views
0

我期待開發一個框架,對此我不想進入細節。在構建之前向類文件中添加代碼 - 目標C

假設我在iPhone應用程序中擁有超過100種以上的方法。 在這種情況下,我想在每個類的每個方法(開始或結束或兩個)中添加NSLog。

手動添加NSLog是可能的,但有沒有更好的解決方案? 像建築應用程序一樣,我可以添加此日誌,而無需我手動工作。

感謝和問候,


丹尼斯,

Your answer是全國各地的許多論壇上最有用的。 非常感謝。

我正在尋找這樣的事情的原因是,我們有很多客戶項目,很多時候它發生,我們得到一些崩潰或在QA和UAT等問題。其中〜80%不可重現或需要某些特定場景。我們使用.crash和dsym來跟蹤這些問題。但在這種情況下它並不有用。

我要找的是提供新增建設特別將記錄哪些用戶已沿襲,它將使容易重現這些問題的步驟。

目前我使用預編譯的頭和第一種方法你提到的(搜索第一個開括號,然後用宏替換)。

我會考慮的DTrace和objc_msgSend如你所提到的。如果你有任何喜歡的教程,我會在這裏谷歌出來,這將是偉大的。

感謝和問候, :d

+2

我建議你在Xcode中使用內置的調試器。 –

+0

嗨感謝您的回覆。 我想看看控制檯上的nslog輸出。 調試器如何幫助我添加許多日誌。我不明白你的意思。 – Abhishek

回答

0

所以,你想一個跟蹤工具添加到您的代碼?

Apple不提供任何此類內容。你必須自己添加你的跟蹤工具。如果你的源代碼的風格是一致的,這可能是比較容易或者自動完成,像起始,遵循負(或加號)線搜索第一個開括號...

,你可能想使用公共的Objective-C運行時函數來枚舉所有類及其所有方法,然後使用另一個方法將它們中的每一個與其跳轉至原始方法。

或者,您可以採取開放源代碼實現objc_msgSend並在開始時插入對NSLog的調用。請注意,obj_msgSend尾部調用方法,這樣可以防止您在返回時添加調用。當然,準備大量產出。您可能想要將您的調用調整爲NSLog,以將選擇器參數的值設置爲objc_msgSend(例如通用前綴)。

最後,追查最好的辦法可能是到DTrace探頭連接到進入objc_msgSend。對於上面提到的相同的尾部呼叫原因,您將無法將DTrace探針附加到其返回。

但是最好的問題是爲什麼你想這麼做。

相關問題