2011-08-19 57 views

回答

2

我不確定對於某人嘗試製作這樣的靜態分析工具而言,這是一個明智的做法 - 這會非常複雜,而且您可能會發現它只會找到函數的平凡示例不被稱爲 - 例如您在課程中創建的功能,並且您沒有對它們的呼叫。所有與Cocoa交互的東西......問題是他們可能會在不同的環境中被調用。

在任何情況下,你應該真正感興趣的是運行時代碼覆蓋率 - 因爲這將告訴你(與測試一個體面的套裝)實際上是正在使用的代碼,這將是一個較小的子集。

+0

同意。這是一個棘手的問題,尤其是當您開始引入函數指針,回調和繁重的條件代碼時。聽起來像停止問題。 – Luke

+0

@Luke - 同意了,這個問題很有趣 - 思考它讓我意識到這將是多麼的艱難。也使用選擇器和消息轉發。爲動態覆蓋編制代碼 - 不是微不足道的,但更容易看到你如何做到這一點。 – iandotkelly

+0

@iandotkelly:有趣的想法,動態地做。想到一些小問題:通過探查器運行你的代碼一段時間,提取所有函數名稱,並與TAGS數據庫進行比較。這應該給你一些想法,哪些功能很少被調用或根本不會。這當然是隨機的,決不是100%準確的,但是消除了許多實際調用的函數的檢查。 – Arne

2

objc_cover會幫你察覺潛在的未使用的Objective-C的方法。

+0

這似乎只涵蓋一個文件。是否有一個涵蓋文件列表? – David

+0

你不給它一個源文件,你給它一個編譯的二進制文件,它返回一個*潛在*未使用的選擇器列表。 – 0xced

0

添加-Wunused-function到您的WARNING_CFLAGS名單。

這也考慮地址引用的功能(理想的正常使用)。然後使用gcc和clang編譯您的程序以獲得最佳覆蓋率。

請注意,此標誌並未涵蓋所有情況(例如導出的函數),它主要關注具有內部鏈接的函數。使用stripnm可以幫助隔離外部符號 - 我不知道這個確切過程的好工具。

如果你想找到未使用的objc方法,你應該改寫你的問題。

相關問題