2012-07-19 46 views
4

我正在嘗試構建一個可用工具列表,用於解析完整的源代碼包並將所有功能/方法作爲單獨的部分提取。我的目標是運行一個工具或腳本,立即知道包中有多少個函數,並根據需要逐個檢查一整套分段函數。從源代碼項目中提取所有功能的工具

現在我正在使用NiCad克隆檢測工具,它包括用TXL(樹形轉換語言)編寫的提取腳本。每個功能都被拉出並作爲一個獨特的實體存儲在XML文檔中,因此處理功能列表非常方便。 NiCad包含C,Java和Python的提取工具。我最關心的是C,但其餘部分都可用。我們還沒有設置C++解析器 - 這很方便。

我也使用了Doxygen,它具有識別調用圖的額外好處。這些文件中有很多標記,因此解析Doxygen的輸出以使它們成爲一個簡單的函數列表是一些額外的工作。

有沒有人使用過提取全套函數/方法的工具?你有建議或警告嗎?如果你已經自己寫了,它可以在某個地方使用嗎?

謝謝!

+4

約Doxygen的是什麼? – 2012-07-19 18:34:28

+2

'libclang'怎麼樣? – 0xC0000022L 2012-07-19 18:35:27

+0

我認爲,在一個寫得很好的C或C++代碼庫中,通過檢查頭文件,你應該能夠看到關於項目如何工作的所有其他相關信息。 – Wug 2012-07-19 18:35:29

回答

0

你可以使用linux的nm工具。 「nm用於列出來自目標文件的符號」。請參閱nm的手冊頁以獲取更多詳細信息;樣本nm在這裏複製供您參考。

void fun1() { 
    return; 
} 

void fun() { 
    fun1(); 
} 
int main() 
{ 
    fun(); 
    return 0; 
} 

上述程序的牛上運行的 「納米的a.out | grep的T」

08048470 T __libc_csu_fini 
08048400 T __libc_csu_init 
080484ac T _fini 
080482b8 T _init 
08048320 T _start 
080483d9 T fun 
080483d4 T fun1 
080483e3 T main 
+0

對不起,但我不認爲這是解決問題。我想要的不僅僅是基本的符號。 – swrittenb 2012-07-20 17:57:58

相關問題