CDebugReportHook クラス
このクラスは、デバッグ レポートを名前付きパイプに送信するときに使用します。
構文
class CDebugReportHook
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CDebugReportHook::CDebugReportHook | SetPipeName、SetTimeout、SetHook を呼び出します。 |
CDebugReportHook::~CDebugReportHook | CDebugReportHook::RemoveHook を呼び出します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CDebugReportHook::CDebugReportHookProc | (静的) C ランタイム デバッグ レポート プロセスにフックされるカスタム レポート関数です。 |
CDebugReportHook::RemoveHook | このメソッドを呼び出して、名前付きパイプへのデバッグ レポートの送信を停止し、以前のレポート フックを復元します。 |
CDebugReportHook::SetHook | このメソッドを呼び出して、名前付きパイプへのデバッグ レポートの送信を開始します。 |
CDebugReportHook::SetPipeName | このメソッドを呼び出して、デバッグ レポートの送信先となるマシンとパイプの名前を設定します。 |
CDebugReportHook::SetTimeout | このメソッドを呼び出して、名前付きパイプが使用可能になるまでこのクラスを待機させる時間をミリ秒単位で設定します。 |
解説
サービスまたはアプリケーションのデバッグ ビルドでこのクラスのインスタンスを作成し、名前付きパイプにデバッグ レポートを送信します。 デバッグ レポートを生成するには _CrtDbgReport を呼び出すか、ATLTRACE や ATLASSERT といったマクロなど、この関数のラッパーを使います。
このクラスを使うと、非対話形式のウィンドウ ステーションで動作するコンポーネントを対話形式でデバッグすることができます。
デバッグ レポートは、スレッドの基盤となるセキュリティ コンテキストを使って送信されることに注意してください。 Web アプリケーションなどで、特権が低いユーザーの権限の借用が発生した場合に、デバッグ レポートを表示できるように、権限の借用は一時的に無効にされます。
要件
ヘッダー: atlutil.h
CDebugReportHook::CDebugReportHook
SetPipeName、SetTimeout、SetHook を呼び出します。
CDebugReportHook(
LPCSTR szMachineName = ".",
LPCSTR szPipeName = "AtlsDbgPipe",
DWORD dwTimeout = 20000) throw();
パラメーター
szMachineName
デバッグ出力の送信先にするマシンの名前を指定します。 既定値はローカル コンピューターです。
szPipeName
デバッグ出力の送信先にする名前付きパイプの名前。
dwTimeout
名前付きパイプが使用可能になるまでこのクラスを待機させる時間をミリ秒単位で設定します。
CDebugReportHook::~CDebugReportHook
CDebugReportHook::RemoveHook を呼び出します。
~CDebugReportHook() throw();
CDebugReportHook::CDebugReportHookProc
C ランタイム デバッグ レポート プロセスにフックされるカスタム レポート関数です。
static int __cdecl CDebugReportHookProc(
int reportType,
char* message,
int* returnValue) throw();
パラメーター
reportType
レポートの種類 (_CRT_WARN、_CRT_ERROR、または _CRT_ASSERT)。
message
メッセージ文字列。
returnValue
_CrtDbgReport から返される値。
戻り値
フックで対象のメッセージを完全に処理できたため、それ以上のレポートが不要な場合は、FALSE を返します。 _CrtDbgReport
から通常の方法でメッセージを報告する必要がある場合は、TRUE を返します。
解説
レポート関数は、名前付きパイプを開き、相手側のプロセスとの通信を試みます。 パイプがビジーの場合、パイプが空くか、タイムアウトになるまでレポート関数は待機します。 タイムアウトを設定するには、コンストラクターを使うか、CDebugReportHook::SetTimeout を呼び出します。
この関数のコードは、呼び出し元のスレッドの基盤となるセキュリティ コンテキストで実行されます。つまり、この関数が実行されている間は、権限の借用が無効になります。
CDebugReportHook::RemoveHook
このメソッドを呼び出して、名前付きパイプへのデバッグ レポートの送信を停止し、以前のレポート フックを復元します。
void RemoveHook() throw();
解説
_CrtSetReportHook2 を呼び出し、以前のレポート フックを復元します。
CDebugReportHook::SetHook
このメソッドを呼び出して、名前付きパイプへのデバッグ レポートの送信を開始します。
void SetHook() throw();
解説
_CrtSetReportHook2 を呼び出し、CDebugReportHookProc を介して名前付きパイプにデバッグ レポートをルーティングします。 RemoveHook が呼び出されたときに復元できるように、このクラスには前のレポート フックの記録が保持されます。
CDebugReportHook::SetPipeName
このメソッドを呼び出して、デバッグ レポートの送信先となるマシンとパイプの名前を設定します。
BOOL SetPipeName(
LPCSTR szMachineName = ".",
LPCSTR szPipeName = "AtlsDbgPipe") throw();
パラメーター
szMachineName
デバッグ出力の送信先にするマシンの名前を指定します。
szPipeName
デバッグ出力の送信先にする名前付きパイプの名前。
戻り値
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
CDebugReportHook::SetTimeout
このメソッドを呼び出して、名前付きパイプが使用可能になるまでこのクラスを待機させる時間をミリ秒単位で設定します。
void SetTimeout(DWORD dwTimeout);
パラメーター
dwTimeout
名前付きパイプが使用可能になるまでこのクラスを待機させる時間をミリ秒単位で設定します。