AfxDumpStack
このグローバル関数が現在のスタックのイメージを作成することもできます。
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
パラメーター
dwTarget
ダンプの出力対象を示します。を使用してビットごとの OR (結合できる有効な値、**|**演算子)は、次のとおりです。:トレース,trace のマクロによって出力されるAFX_STACK_DUMP_TARGET_TRACE の送信します。トレース,trace のマクロは、デバッグ ビルドのみ出力を生成します; これは、リリース ビルドの出力が生成されません。また、 トレース,trace は、デバッガーのほかの他のターゲットにリダイレクトできます。
AFX_STACK_DUMP_TARGET_DEFAULT の送信が既定のターゲットに出力をダンプします。デバッグ ビルドの場合、出力は トレース,trace のマクロに移動します。リリース ビルドでは、クリップボードに移動します。
クリップボードだけに出力されるAFX_STACK_DUMP_TARGET_CLIPBOARD の送信します。データは CF_TEXT のクリップボード形式を使用してプレーン テキストとしてクリップボードに配置されます。
AFX_STACK_DUMP_TARGET_BOTH がクリップボードに トレース,trace のマクロに出力を同時に送信します。
Win32 関数によってデバッガーに直接 OutputDebugString()出力されるAFX_STACK_DUMP_TARGET_ODS の送信します。このオプションは、デバッガーがプロセスにアタッチされている場合、デバッグ ビルドとリリース ビルドの両方のデバッガー出力を生成します。AFX_STACK_DUMP_TARGET_ODS は、デバッガーに接続されている場合)、常に到達し、リダイレクトすることはできません。
解説
次の例は、 MFC ダイアログ アプリケーションのボタン ハンドラーから AfxDumpStack を呼び出すことで生成された出力の一つの行を反映します:
=== begin AfxDumpStack output ===
00427D55: DUMP2\DEBUG\DUMP2.EXE! void AfxDumpStack(unsigned long) + 181 bytes
0040160B: DUMP2\DEBUG\DUMP2.EXE! void CDump2Dlg::OnClipboard(void) + 14 bytes
0044F884: DUMP2\DEBUG\DUMP2.EXE! int _AfxDispatchCmdMsg(class CCmdTarget *,
unsigned int,int,void ( CCmdTarget::*)(void),void *,unsigned int,struct AFX_CMDHANDLE
0044FF7B: DUMP2\DEBUG\DUMP2.EXE! virtual int CCmdTarget::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 626 bytes
00450C71: DUMP2\DEBUG\DUMP2.EXE! virtual int CDialog::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 36 bytes
00455B27: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnCommand(unsigned
int,long) + 312 bytes
00454D3D: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnWndMsg(unsigned
int,unsigned int,long,long *) + 83 bytes
00454CC0: DUMP2\DEBUG\DUMP2.EXE! virtual long CWnd::WindowProc(unsigned
int,unsigned int,long) + 46 bytes
004528D9: DUMP2\DEBUG\DUMP2.EXE! long AfxCallWndProc(class CWnd *,struct
HWND__ *,unsigned int,unsigned int,long) + 237 bytes
00452D34: DUMP2\DEBUG\DUMP2.EXE! long AfxWndProc(struct HWND__ *,unsigned
int,unsigned int,long) + 129 bytes
BFF73663: WINDOWS\SYSTEM\KERNEL32.DLL! ThunkConnect32 + 2148 bytes
BFF928E0: WINDOWS\SYSTEM\KERNEL32.DLL! UTUnRegister + 2492 bytes
=== end AfxDumpStack() output ===
上の出力の各行は関数呼び出しを含む、という名前の関数プロトタイプ示しますモジュールの最後の関数呼び出し、完全なパス名をアドレス。履歴上の関数呼び出しで関数のアドレスに厳密起こらなければ、バイトのオフセットが表示されます。
たとえば、次の表に、前の出力最初の行についての説明です:
出力 |
Description |
---|---|
00427D55: |
最後の関数呼び出しのリターン アドレス。 |
DUMP2\DEBUG\DUMP2.EXE! |
関数呼び出しを含むモジュールの完全パス名。 |
void AfxDumpStack(unsigned long) |
呼び出される関数プロトタイプ。 |
+ 181 bytes |
リターン アドレス (この場合、 00427D55)への関数プロトタイプのアドレスからバイト オフセット (この場合、 void AfxDumpStack(unsigned long))。 |
AfxDumpStack は、 MFC ライブラリのデバッグ バージョンと非デバッグ バージョンで使用できる; ただし、実行可能ファイルが共有 DLL で MFC を使用した場合でも、常に静的にリンクされます。共有ライブラリの実装では、関数は MF CS42 .LIB のライブラリとバリアントにある ()。
この関数を正しく使用する場合:
ファイル IMAGEHLP.DLL はパスである必要があります。この DLL が見つからない場合、関数はエラー メッセージを表示します。IMAGEHLP によって提供される関数の設定の詳細については、 イメージのヘルプ ライブラリ を参照してください。
スタックの帯を持つモジュールにデバッグ情報を含める必要があります。これらのデバッグ情報が含まれていない場合、関数は、スタック トレースを生成して、トレースに含まれる情報が少なくなります。
必要条件
ヘッダー : afx.h