ホームページ > バックエンド開発 > C++ > 実行パスを分析するために C コードのコール グラフを生成するにはどうすればよいですか?

実行パスを分析するために C コードのコール グラフを生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-16 18:35:03
オリジナル
803 人が閲覧しました

How to Generate a Call Graph for C   Code to Analyze Execution Paths?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート