コールグラフ自体はまさにそれです。「間違った」呼び出しグラフはありません (再帰を禁止するスタイル チェックがない限り)。
本当の問題は、プログラムのある時点でのコードがどのように問題になるかを理解するには、通常、その時点での世界の形 (どのデータ構造が生きているのか、どのような値が含まれているのか、どのような関係があるのか) を理解する必要があるということです。そのコードポイントがアクティブな瞬間。コール グラフは、実行が対象のコード ポイントに到達する方法を示し、そのコール グラフ パスに沿ったすべてのコードがコード実行コンテキストを設定します。これにより、静的アナライザーは「状況に応じた」分析を生成できるようになり、より正確な回答が得られます。
これは 2 番目の問題につながります: 正確なコール グラフを取得するにはどうすればよいでしょうか? A から B を直接呼び出す場合、「A が B を呼び出す」と書き留めて、これが正確なコールグラフの事実であると感じるのは簡単です。しかし、A が間接ポインター (仮想メソッドのディスパッチと言えますか?) を介して呼び出しを行うと、突然、A が誰を呼び出しているかが明確ではなくなります。あなたは最終的にA-might-call-B1、A-might-call-B2、... Aが実際に呼び出すものは、Aが実行されるコンテキストに依存します...おっと、製造するにはコールグラフが必要ですコールグラフ。一種の良いニュースは、呼び出しグラフを下から構築することです。「これは確かに真だとわかっているので、それは確かに真でなければなりません」。分析担当者がそれを理解できない場所では、通常、保守的な推測を行います: (「これらの呼び出しはすべて可能かもしれません。私には可能です」