2

私のプロジェクトには多くのファイルが含まれています。

特定の関数がソース コードのどこで定義 (実装) されているかを知る必要がある場合があります。私が現在行っているのは、関数名のソース ファイル内でのテキスト検索です。これには非常に時間がかかります。

私の質問は: ソース ファイルでその関数定義を見つけるためのより良い方法 (コンパイラ/リンカー フラグ) はありますか?.

関数は多くの呼び出しに埋もれている可能性があるため、デバッガーで関数呼び出しにステップインするよりも優れたメソッドを望んでいます。

4

2 に答える 2

2

cscope ユーティリティを試してください。

マニュアルから:

以下のコードを検索できます。

  • シンボルへのすべての参照
  • グローバル定義
  • 関数によって呼び出される関数
  • 関数 関数を呼び出す 関数
  • テキスト文字列
  • 正規表現パターン
  • ファイル
  • ファイルを含むファイル

  • Curses ベース (テキスト スクリーン)

  • 検索を高速化し、後で参照できるように情報データベースが生成されます
  • ファジー パーサーは C をサポートしますが、C++ や Java で使用したり、一般化された「grep データベース」として使用したりするのに十分な柔軟性を備えています (これを使用して、大きなテキスト ドキュメントを参照してください)。
  • スクリプトに含めるため、または GUI/フロントエンドのバックエンドとして使用するためのコマンド ライン モードがあります。
  • Unix のすべてのフレーバーに加えて、ほとんどの独占管理されたオペレーティング システムで実行されます。

「スクリーンショット」:

C symbol: atoi

  File     Function     Line
  0 stdlib.h <global>      86 extern int atoi (const char *nptr);
  1 dir.c    makefilelist 336 dispcomponents = atoi(s);
  2 invlib.c invdump      793 j = atoi(term + 1);
  3 invlib.c invdump      804 j = atoi(term + 1);
  4 main.c   main         287 dispcomponents = atoi(s);
  5 main.c   main         500 dispcomponents = atoi(s);
  6 stdlib.h atoi         309 int atoi (const char *nptr) __THROW



  Find this C symbol:
  Find this global definition:
  Find functions called by this function:
  Find functions calling this function:
  Find this text string:
  Change this text string:
  Find this egrep pattern:
  Find this file:
  Find files #including this file:
于 2014-04-10T08:51:28.400 に答える
0

シンボルがエクスポートされている場合は、ファイルを接続しobjdumpたりnm、調べたりすることができ.oます。ただし、これはヘッダー ファイル内のものを見つけるのには役立ちません。

私の提案は、プロジェクトを入れてgit(他にも多くの利点があります)、 git のリビジョン管理下にあるファイルのみを参照する (ファイルやその他の無関係なものをオブジェクト化git grepしないことを意味します) を使用することです。も素敵で速いです。grepgit grep

于 2014-04-09T19:55:18.293 に答える