2012-03-27 39 views
8

這是我最近遇到的一個問題,那就是在這裏對其他人造成的痛苦。如何快速搜索某個特定功能或宏的項目中包含的所有頭文件?

我正在與別人的遺留C代碼,並需要找到一個函數或宏的定義。代碼#include除了來自特定項目的標準系統庫外,還有許多不同的標準系統庫。

是否有工具或技術可以快速找到特定函數,宏(或其他全局事件)的定義?

我想:

grep -R 'function' /usr/lib 

和其他類似的* nix/bash的福,只有有限的成功和許多惱人的穀殼宰殺。你們之中的一位聖人編碼人員必須對這種看似普遍的情況有一個很好的解決方案。

我很驚訝沒有找到關於這個特殊疼痛的另一個問題,或者我在搜索interwebs時發現的另一個問題。 (如果我錯過了一個,我肯定會有生氣的評論... ;-))

在此先感謝您的任何提示!

+1

我們有Opengrok和Doxygen的組合,它有點幫助... – BoBTFish 2012-03-27 11:00:10

回答

4

使用etags/ctagsexuberant ctags project連同理解它們的編輯器(emacs,vim)或GNU GLOBAL

哦,如果你碰巧使用automake,它會產生一個目標TAGS。所以不需要複雜的手動撥打{c,e}tags

+0

謝謝。雖然我之前使用過ctags,但我還沒有意識到我可以將它們用於現有的系統庫。我喜歡GNU GLOBAL能夠顯示函數的實例(即CTAGS所做的反向映射)。 – JJC 2012-03-27 19:21:11

1

使用的ctags/cscope的+ VIM/emacs的

你可以谷歌自己的詳細使用。

如果使用CTAGS + VIM,您可以:

1.go到/usr/include目錄,EXCUTE ctags -f tags1 -R .生成代碼目錄ctags -f tags2 -R標籤

2.generate標籤爲你的代碼。

3.run :set path+=tags1,tags2在你的vim

4.under功能或馬可嘗試CTRL+]

0

vim + ctags是要走的路。您可以跳轉到定義函數,全局變量,宏等等,等等

僅供參考,並browsing programs with tags

另外,如果你想快速.c和.h文件之間切換,請參考this blog

0

你可以使用cscopeemacs/vim + xcscope.el來做到這一點。我認爲它的麪糊比ctage和etage。

0

只要包含直接或間接定義所需內容的正確頭文件,大多數IDE都具有跳轉到定義功能的功能。

標籤方法當然很好,因爲它們不依賴於正確包含的標頭。

1

這是你可以做的,假設你使用gcc,如果不是相應地修改它。

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME" 
相關問題