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