C コードのコール グラフの生成
この記事では、特にすべてのコードを識別しようとする場合に、C コードのコール グラフを作成する手法について説明します。特定の関数につながる可能な実行パス。
呼び出しの作成Graph
このニーズに対処する 1 つのアプローチは、LLVM 最適化パイプラインを活用することです。これは、-S フラグと -emit-llvm フラグを使用してコードをコンパイルし、続いて opt ツールを使用して -analyze オプションと -dot-callgraph オプションを使用することで実現できます。例:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph $ dot -Tpng -ocallgraph.png callgraph.dot
このコマンドは、視覚的な図として示される、潜在的な実行パスを表すコール グラフを生成します。
コール グラフ表現のカスタマイズ
場合によっては、可読性を高めるためにコール グラフを後処理すると有益な場合があります。 1 つの方法は、c filt を使用して、マングルされていない関数名とクラス名を取得することです。次の例は、このプロセスを示しています。
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -std-link-opts -dot-callgraph $ cat callgraph.dot | c++filt | sed 's,>,\>,g; s,-\>,->,g; s,<,\<,g' | gawk '/external node/{id=} != id' | dot -Tpng -ocallgraph.png
この変更されたグラフを適用すると、各パスに関係する特定の関数とクラスを識別しやすくなります。
以上が実行パスを分析するために C コードのコール グラフを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。