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


AfxDumpStack

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

void AFXAPI AfxDumpStack( 
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT 
);

Параметры

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

    • 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 отправляет выходные данные непосредственно в отладчике с помощью функции OutputDebugString() Win32. Этот параметр вызывает отладчик выходные данные в версиях отладки и построения выпуска при отладчик вложен в процесс. 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.

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

Требования

Header: afx.h

См. также

Ссылки

afxDump (CDumpContext в MFC)

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

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