2012-02-10 10 views
0

私はfunc_treeを使用していますが、マクロの関数呼び出しと関数を表示していないopensourceツールを誰かに提案できますか? ?Cコードの関数呼び出しツリーをファイルにダンプする方法は?

+0

なぜC言語であればこのC++にタグを付けましたか? –

+0

コールツリーを構築するとどういう意味ですか? – AJG85

+0

マクロは機能ではありません。マクロはコピー&ペーストされています。どんな種類のデバッガやスタックトレースにも表示されることはありません。 –

答えて

0

コードをコンパイルする直前に、Cプリプロセッサがすべてのマクロを展開します。これは、コンパイラでさえマクロ定義を見ることができないことを意味します。残念なことに、関数呼び出しのトレースにマクロを含めることはできません。

ランタイム環境がどの程度よく分かっているかによって、スタックトレースフレームがスタック内の現在の位置からどこにあるかをバック計算することができます。残念なことに、厳密な詳細は1つの環境でのみ有効です。各環境のスタックセマンティクスの発見を再実行する必要があります。 Here is project that performs such a techniqueですが、それがあなたにとって非常に有用かどうかを知ることはできません。

コンパイラが同等の機能コードを呼び出しブロックに配置するときに、関数呼び出しが存在しないように変更されるため、このような手法ではコンパイラのインライン展開も表示されない可能性があります。

特定の環境でGoogleと同様のプロジェクトが見つからない場合は、自分で作成する必要があります。それがあなたを超えている場合は、環境の低レベルの詳細を学習する価値があるかどうか、またはより強力なロギングを実行するほうがよいかどうかを調べる必要があります。

関連する問題