0

誰かがcのコードの呼び出しツリーを構築する方法を教えてくれますか誰かが私にfunc_treeを使用したオープンソースツールを提案できるなら、マクロ関数呼び出しとマクロの下の関数を表示していません...?????

4

1 に答える 1

0

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

ランタイム環境をどれだけよく知っているかに応じて、スタック内の現在の位置からスタック トレース フレームがどこにあるかを逆算できる場合があります。残念ながら、正確な詳細が 1 つの環境でしか機能しないのは、多くの場合トリックです。環境ごとにスタック セマンティクスの検出を再実行する必要があります。 ここにそのようなテクニックを実行するプロジェクトがありますが、それがあなたにとって非常に役立つかどうかを知ることは不可能です.

コンパイラが同等の機能コードを呼び出しブロックに配置するときに、関数呼び出しが存在しないように書き換えられるため、このような手法ではコンパイラのインライン化も表示されない可能性が高いことに注意してください。

特定の環境で Google の同様のプロジェクトが見つからない場合は、おそらく自分で作成する必要があります。それができない場合は、環境の低レベルの詳細を学習する価値があるかどうか、またはより堅牢なログを実行する方がよいかどうかを調査する必要があります。

于 2012-02-10T16:10:36.493 に答える