次の方法で共有


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

参照

関連項目

afxDump (MFC の CDumpContext)

概念

MFC マクロとグローバル