2017-07-06 13 views
2

リストにどのような方法(VSでのショー、ファイルへの書き込み)すべての呼び出し元機能の(オブジェクト、関数)はありますか?おそらくデバッガを使用していますか?実行時に関数のすべての呼び出しをリストする方法は?プログラムの実行中に

は私がレコードにその終了までのプログラムの立ち上げから機能(発信者を含む)すべてのコールを必要とします。プログラムは、所望の機能を呼び出すための要求を受信するサーバーとして動作する可能性があるため、ソースコードやバイナリ

簡単なスキャンは、ジョブを行いません。

Visual Studioでこの機能が提供されていない場合、この問題の解決策はありますか?

+0

: 私たちは、レポートをエクスポートすることができますある時点のコールスタックでは、呼び出し元をスタックから把握できる可能性があります。 – Justin

+0

しかし、可能であれば、私はしたくない手動です。 – Shiro

+0

スタックポインタを使用してリターンアドレスを取得できる場合があります。問題は、関数名がリリース実行ファイルから削除されることです。 –

答えて

1

VSプロファイラツールも役立ちます。メソッド "CPUサンプリング"を選択できます。

enter image description here

それが終わった後、あなたは "発信者/呼び出し先" を選択することができます。

enter image description here

参考:

https://docs.microsoft.com/en-us/visualstudio/profiling/caller-callee-view

更新:あなたは関数がインライン展開されることはありませんことを確認した場合、参照するにはAPIがあるかもしれない enter image description here

+0

ファイルに出力できますか? – Shiro

+0

@Shiro、はい、レポートをエクスポートできます。私は自分の答えを編集する。 –

1

IMO、あなたの最善の解決策は、ロギング機能を追加することです。

あなたの関数のすべての呼び出しを検索します。関数が呼び出される前に、何らかの情報をログファイルに出力します。これにより、関数呼び出しの注釈付き履歴が得られます。

もう1つのアイデアは、Doxygenのようなドキュメントツールを使用して、「呼び出し元」と「呼び出し先」の図を印刷することです。ただし、これはプログラムの実行中ではありません。

+0

問題は実行時のアスペクトに正確に存在します。このようにして、プログラムが呼び出しを受け取るサーバーとしてどのように動作するかはわかりません。 – Shiro

+0

これは本当です。関数をマクロ(yuck)に置き換えて、呼び出し元の関数名(マクロとして利用可能ですが、私は何を思い出していませんか)を記録することができます – Justin

+0

呼び出し元の名前を保持するマクロはありますか? – Shiro

0

プログラムが.NETアプリケーションの場合は、プログラムが実行されている間に、関数を使用して関数の呼び出し元をすべて表示できます。

関連する問題