Поделиться через


AfxDumpStack

Эту глобальную функцию можно использовать для создания образа текущего стека.

void AFXAPI AfxDumpStack(
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);

Параметры

  • dwTarget
    Указывает целевой объект вывода дампа.Возможные значения, которые можно сочетать использование побитового или (**|**Оператор) следующим образом:

    • AFX_STACK_DUMP_TARGET_TRACE отправляет выходные данные с помощью макроса следование.Макрос следование выводит данные в отладочные построения только; он не создает никаких выходных данных в построениях выпуска.Кроме того, следование может быть перенаправлен к другим целевым объектам помимо отладчика.

    • AFX_STACK_DUMP_TARGET_DEFAULT отправляет выходные данные дампа по умолчанию к целевому объекту.Для построения отладки вывод переходит к макросу следование.В построении выпуска, выход будет в буфер обмена.

    • AFX_STACK_DUMP_TARGET_CLIPBOARD отправляет выходные данные в буфер обмена.Данные помещаются в буфер обмена в виде обычного текста, используя формат буфера обмена CF_TEXT.

    • AFX_STACK_DUMP_TARGET_BOTH отправляет выходные данные в буфер обмена и к макросу следование, одновременно.

    • AFX_STACK_DUMP_TARGET_ODS отправляет выходные данные непосредственно в отладчик посредством функции Win32 OutputDebugString().Этот параметр вызывает отладчик вывод отладки и построения и освобождаются, когда отладчик вложен в процесс.AFX_STACK_DUMP_TARGET_ODS всегда достигает отладчик (если он вложен) и не может быть захвачено.

Заметки

В приведенном ниже примере отражает одинарная линия выхода, созданного из вызова AfxDumpStack из обработчика кнопок в приложении диалогового окна MFC:

=== 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 ===

Каждая линия на выходе выше указывает адрес последнего вызова функции, имя полного пути модуля, содержащего вызов функции и вызванного прототипа функции.Если вызов функции в стеке не происходит при явном адресу функции, то смещение байтов.

Например, в следующей таблице описаны первой линии вышеуказанного вывода:

Output

Описание

00427D55:

Обратный адрес последнего вызова функции.

DUMP2\DEBUG\DUMP2.EXE!

Имя полного пути модуля, содержащего вызов функции.

void AfxDumpStack(unsigned long)

Вызванный прототип функции.

+ 181 bytes

Смещение в байтах от адреса прототипа функции (в данном случае void AfxDumpStack(unsigned long)) в обратный адрес (в данном случае 00427D55).

Доступно в AfxDumpStack отладки и версии nondebug библиотек MFC; однако функция всегда, даже если статически связана исполняемый файл следует использовать MFC в общей DLL.В реализациях общей библиотеки, функция расположена в библиотеке MFCS42.LIB (и его вариантов).

Использовать эту функцию успешно:

  • IMAGEHLP.DLL файл должен находиться в пути.При отсутствии это библиотека DLL, то функция отобразит сообщение об ошибке.См. раздел Библиотеки Справки образа сведения о наборе функций предоставленном IMAGEHLP.

  • Модули, которые имеют кадров в стеке должны включать данные отладки.Если они не содержат данных отладки, то функция по-прежнему отдает трассировку стека, но трассировка будет менее detailed.

Требования

Header: afx.h

См. также

Ссылки

CDumpContext в afxDump (MFC)

Основные понятия

Макросы и глобальные MFC