2012-11-10 8 views
3

我正在尋找一個工具,它會幫助我得到所有的C++程序提供的功能與目錄一起的所有功能(如果遞歸調用),他們都在用。Ubuntu的命令來獲得在C++程序

例如如果在該文件夾2存在的folder1運行是foo.c的具有INT FOO()

我想獲得INT FOO()目錄文件夾2/foo.c的

+2

這篇文章絕對*不*脫離主題。這是一個非常好的,絕對是編程相關的問題。恕我直言... – paulsm4

回答

1

萬一你的Eclipse安裝CDT( http://www.eclipse.org/cdt/),您可能只需創建一個新項目,導入所有代碼並執行C/C++搜索。

1

CTAGS也許你想要什麼。 http://ctags.sourceforge.net/

它是像vim或emacs這樣的編輯器創建標籤的工具。這些編輯器可以使用標籤來查找函數和類的聲明和定義。

2

這是一個非常粗略的近似值,但可能已經使您更接近您要查找的內容,並且它具有非常簡單的優點。從您的代碼庫的頂層目錄,運行:

find -name "*.h" -exec grep -H '^[^/]*(' {} \; 
0

我認爲,當你說你的「C++程序」的您可以訪問所有的C++源文件,以及它的建築,例如其Makefile

如果您有權訪問生成的二進制文件,您可以使用它上面的nm -C獲取其中的功能。

然後,你可能會考慮使用一些GCC擴展或插件。您可以使用MELT(這是擴展GCC編譯器的域特定語言)來擴展GCC。 melt-examples/ex02示例正在做一些非常相似的事情(它只是對函數進行計數,並且可以添加幾行以使其輸出當前計數函數的名稱和源位置)。

但請注意,由於GCC正在優化,程序內的函數概念可能不如您想象的那麼明顯:GCC​​是克隆和內聯函數,這意味着生成的程序中的函數集不是集合源代碼中的函數。

在GCC編譯器中工作的好處是,你真的得到了編譯器看到的函數。例如,文本方法(如基於ctagsgrep的答案)在預處理技巧方面表現不佳。