ツールを書いていて、いくつかの C プロジェクトのコールグラフを生成する必要があります。clang を使用して 1 つのファイルのコールグラフを生成することはできましたが、数十のヘッダー ファイルとソース ファイルを含むプロジェクト全体でコール グラフを生成する方法を見つけることができませんでした。
解析可能なファイルにコールグラフを生成できるツールであれば問題ありません。使用可能なライブラリが優れています。
ツールを書いていて、いくつかの C プロジェクトのコールグラフを生成する必要があります。clang を使用して 1 つのファイルのコールグラフを生成することはできましたが、数十のヘッダー ファイルとソース ファイルを含むプロジェクト全体でコール グラフを生成する方法を見つけることができませんでした。
解析可能なファイルにコールグラフを生成できるツールであれば問題ありません。使用可能なライブラリが優れています。
また、言及する価値があるのは、優れたGNU cflowです。
GNU cflow は、C ソース ファイルのコレクションを分析し、グラフを出力して、プログラム内の制御フローをチャート化します。
GNU cflow は、C ソースの直接フローグラフと反転フローグラフの両方を生成できます。オプションで、相互参照リストを生成できます。POSIX と GNU (拡張) の 2 つの出力形式が実装されています。
入力ファイルは、オプションで分析前に前処理できます。
編集
ライブラリリクエストと同様。「微調整」output.c
して、印刷する代わりに、データで何か他のことをしたいかもしれません。内部フローは出力ハンドラーに編成されているため、独自のハンドラーを作成することで、すでにうまくいくと思います。ただし、すぐに使用できるわけではありません。
私のコメントを答えに変えます。
アセンブリの出力を見て、スクリプトを使用してそれを処理できます。Linux で gcc を使用すると仮定すると、次のように-S
フラグを渡しgcc
て結果を処理します。
perl -ne '/^([^. \t#].*):/ and $f=$1;/call\s+([^*]\S*)/ and print "$f -> $1\n";' *.S
これにより、呼び出し元と呼び出された関数を含む各静的呼び出しの行が得られます。その周りにボイラープレートを少し追加して、結果をdot
、またはそれでやりたいことは何でもフィードできます。
正規表現の「アスタリスクで始めてはならない」部分を省略して、間接呼び出しの兆候を示すこともできます。その時点でどの関数が呼び出されるかはまだわかりませんが、少なくとも知っておくべきことがもっとあることがわかります。