在C++代碼中找到未實例化模板的最佳方法是什麼?在C++代碼中查找非實例化模板
我有一個大量使用模板的代碼庫。 當然,我們要確保測試覆蓋率很高。 對於所有使用的代碼,這可以很好地使用gcov
。
但是,未使用的模板被報告爲gcov
不可執行。
一些google搜索後,似乎沒有辦法強迫g++
發出代碼爲這些模板(這是唯一合乎邏輯的,編譯器應該怎麼猜到的任何類型?) 似乎也沒有辦法讓gcov將未被證實的模板代碼識別爲可運行代碼。
是否有任何「開箱即用」的功能允許我擴充由GCC -ftest-coverage -fprofile-arcs
儀器生成的文件?通過gcov option documentation of GCC,將整個模板函數體標記爲一個塊可能就足夠了,因爲執行永遠不會結束。
編輯(背景信息):我正在研究僅標題模板庫。 我的目標是找到未使用/未經測試的功能。
我知道代碼覆蓋率有缺陷,但發現無實際代碼是朝着更好的測試代碼邁出的非常重要的一步。 目前,我們將檢查點宏放在每個函數的開頭。 在測試模式下,它們擴展爲將一對(file, line)
插入全局通過的檢查點集的代碼。 運行測試後,我們手動讀取所有文件,並將所達到的檢查點與所有可用檢查點的集合進行比較。
查找未經實例化的代碼很重要,例如,由於C++模板優先級不直觀的行爲,因此可能存在讀者甚至作者期望使用的死代碼。
您的意思是從不爲任何類型實例化的模板類/結構體/函數? – Xeo 2011-04-25 21:28:05
@Xeo:是的,這就是我的意思。 – Manuel 2011-04-25 21:28:45
我不確定你問的問題對我有意義。編譯器僅爲所使用的類型實例化模板。如果某些給定類型從未用於該模板,那麼該特定實例化將不存在於目標代碼級別。 – greatwolf 2011-04-25 21:31:59