我知道函數可以動態調用,但是有沒有辦法靜態確定哪些函數(和ObjC對象的方法)沒有被調用?有沒有辦法確定Xcode4中未使用的函數?
5
A
回答
2
我不確定對於某人嘗試製作這樣的靜態分析工具而言,這是一個明智的做法 - 這會非常複雜,而且您可能會發現它只會找到函數的平凡示例不被稱爲 - 例如您在課程中創建的功能,並且您沒有對它們的呼叫。所有與Cocoa交互的東西......問題是他們可能會在不同的環境中被調用。
在任何情況下,你應該真正感興趣的是運行時代碼覆蓋率 - 因爲這將告訴你(與測試一個體面的套裝)實際上是正在使用的代碼,這將是一個較小的子集。
2
objc_cover會幫你察覺潛在的未使用的Objective-C的方法。
0
添加-Wunused-function
到您的WARNING_CFLAGS
名單。
這也考慮地址引用的功能(理想的正常使用)。然後使用gcc和clang編譯您的程序以獲得最佳覆蓋率。
請注意,此標誌並未涵蓋所有情況(例如導出的函數),它主要關注具有內部鏈接的函數。使用strip
和nm
可以幫助隔離外部符號 - 我不知道這個確切過程的好工具。
如果你想找到未使用的objc方法,你應該改寫你的問題。
相關問題
- 1. 有沒有辦法確定未使用的數據綁定
- 2. 有沒有辦法確定JavaScript函數是否有副作用?
- 3. 有沒有辦法處理在JavaScript中調用未定義的函數?
- 4. 有沒有辦法在matlab中定義一個通用函數?
- 5. 有沒有辦法在Xcode4中「測試」當前文件?
- 6. 有沒有辦法確定共享庫的導出符號的函數參數?
- 7. 有沒有辦法在Python中打印函數的定義
- 8. 有沒有辦法確定任意java方法的一般成本函數?
- 9. 有沒有辦法在Hapi驗證中使用命名函數?
- 10. 有沒有辦法讓Doxygen在函數原型中使用宏?
- 11. 有沒有什麼辦法可以在函數中使用get_sidebar?
- 12. 有沒有辦法在pytorch中使用外部丟失函數?
- 13. (iphone)有沒有辦法看到xcode4的編譯輸出?
- 14. 有沒有辦法在調用對象的未定義函數時調用自定義函數?
- 15. 有沒有辦法阻止在編譯期間使用未實現的函數?
- 16. 有沒有辦法忽略未使用的未定義的引用?
- 17. 有沒有辦法確定Firebase用戶的UID是否有效?
- 18. 有沒有辦法確定Azure表中的現有分區?
- 19. 有沒有辦法確定java中有多大的對象?
- 20. 有沒有辦法替換C++中的方法中的函數
- 21. 有沒有辦法在java中的父類中調用函數?
- 22. 有沒有辦法使用stl函數上的Boost序列化
- 23. 有沒有辦法在jQuery中永久定義一個函數?
- 24. 有沒有辦法在emacs lisp中取消定義函數?
- 25. 有沒有辦法在函數中定義模型字段?
- 26. 有沒有辦法在F#中導入(打開)特定函數?
- 27. 有沒有辦法在python中自動定義一個函數?
- 28. 有沒有辦法在XQuery Value函數中指定「where」條件?
- 29. 有沒有辦法使用JNI調用本地主函數?
- 30. VBA中有沒有辦法知道未使用的變量?
同意。這是一個棘手的問題,尤其是當您開始引入函數指針,回調和繁重的條件代碼時。聽起來像停止問題。 – Luke
@Luke - 同意了,這個問題很有趣 - 思考它讓我意識到這將是多麼的艱難。也使用選擇器和消息轉發。爲動態覆蓋編制代碼 - 不是微不足道的,但更容易看到你如何做到這一點。 – iandotkelly
@iandotkelly:有趣的想法,動態地做。想到一些小問題:通過探查器運行你的代碼一段時間,提取所有函數名稱,並與TAGS數據庫進行比較。這應該給你一些想法,哪些功能很少被調用或根本不會。這當然是隨機的,決不是100%準確的,但是消除了許多實際調用的函數的檢查。 – Arne