2012-03-27 6 views
8

ここに私が最近持っていた問題は、他の人たちにとって共通の痛みであることがあります。プロジェクト内のすべてのヘッダファイルを特定の関数またはマクロですばやく検索するにはどうすればよいですか?

私は他の誰かのレガシーCコードと一緒に作業しており、関数またはマクロが定義されている場所を見つける必要があります。コード#includeは、特定のプロジェクトのシステムライブラリに加えて、さまざまな標準システムライブラリをまとめたものです。

特定の機能、マクロ、またはその他のグローバルについて定義された場所をすばやく見つけるツールやテクニックはありますか?

は、私が試した:

grep -R 'function' /usr/lib 

と限られた成功と迷惑なチャフのたくさんの他の類似の* nix/bashの-FUを淘汰します。あなたのうちの1人は、この一見一般的なシナリオに対する良い解決策を持っていなければなりません。

私は非常に驚いたが、この特定の痛みやインターウェブの検索では別の質問は見つからない。 (もし私が1つを見逃してしまったら、怒っているコメントがあると確信しています... ;-))

ありがとうございました!

+1

は、我々は少し... – BoBTFish

答えて

4

それらを理解し、またはGNU GLOBALエディタ(emacsやvimの)と一緒にexuberant ctags projectから使用etags/ctags

ああ、automakeを使用した場合、ターゲットTAGSが生成されます。したがって、{c,e}tagsへの複雑な手動呼び出しは必要ありません。あなたはそれらの詳細な使用のためにGoogleができ

+0

感謝を助けOpengrokとDoxygenの組み合わせを、持っています。前にctagsを使っていましたが、私は既存のシステムライブラリのためにそれらを使うことができるとは思いませんでした。私はGNU GLOBALが関数のインスタンスを表示することが好きです(つまり、CTAGSの逆マッピング)。 – JJC

1

利用のctags/cscopeの+のvim/emacsの

。あなたはctagsの+のvimを使用している場合

、次のことができます。

1.go /usr/includeディレクトリに、ctags -f tags1 -R .はあなたのコードのディレクトリctags -f tags2 -Rにあなたのコードのためのタグ

2.generateタグを生成excute。あなたのvim

3.run :set path+=tags1,tags2機能やマルコ4.underあなたは、Eclipse CDTを使用することができますCTRL+]

0

を試してみてください。ここでは、Linuxカーネルソース-をナビゲートするためにCDTプロジェクトをセットアップする方法について説明します。

0

vim + ctagsです。あなたはする場合はすぐに、また、へと定義関数、グローバル変数、マクロ、などなどFYI

browsing programs with tags

ジャンプの.cと.hファイル切り替えることができ、参照してくださいthis blog

0

cscopeまたはemacs/vim + xcscope.elを使用すると、簡単にそれを行うことができます。私はそれはカントとエゲージよりもバッターだと思います。

0

あなたが探しているものを直接的または間接的に定義する正しいヘッダーが含まれていれば、ほとんどのIDEには機能するJump to-Definition機能があります。

タグのアプローチは、正しく含まれているヘッダーに依存しないため、当然です。

1

gccを使用していると仮定して、これを行うことができます。

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