更新 : 2007 年 11 月
プロファイル API には、呼び出し履歴を呼び出す 2 とおりの方法が用意されています。スタック スナップショットによる方法では呼び出し履歴を少ない頻度で収集でき、シャドウ スタックによる方法では呼び出し履歴を常時追跡します。このトピックでは、これらの 2 つの方法の概要を説明します。
スタック スナップショット
スタック スナップショットは、ある特定の時点でのスレッドのスタックのトレースです。プロファイル API はスタックでのマネージ関数のトレースをサポートしますが、アンマネージ関数のトレースはプロファイラ独自のスタック ウォーカで処理する必要があります。
プロファイラでマネージ スタックを走査するようにプログラミングする方法の詳細については、このドキュメント セットの ICorProfilerInfo2::DoStackSnapshot メソッド、および MSDN ライブラリの「.NET Framework 2.0 におけるプロファイラ スタック ウォーク: その基本と発展」を参照してください。
シャドウ スタック
スナップショット方式を頻繁に使用すると、すぐにパフォーマンスの問題につながる可能性があります。スタック トレースを頻繁に実行する必要がある場合は、代わりにプロファイラで FunctionEnter2、FunctionLeave2、FunctionTailcall2、および ICorProfilerCallback2 の各例外コールバックを使用して、シャドウ スタックを作成する必要があります。シャドウ スタックは常に最新であり、スタック スナップショットが必要なときいつでも簡単にストレージにコピーできます。
シャドウ スタックでは、関数の引数、戻り値、およびジェネリックなインスタンス化に関する情報を取得できます。この情報は、シャドウ スタックを通してのみ使用でき、制御が関数に渡されたときに取得できます。ただし、後から関数の実行中にこの情報を使用することはできません。
参照
参照
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 メソッド