AfxDumpStack
Esta función global se puede utilizar para generar una imagen de la pila actual.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Parámetros
dwTarget
Indica el destino de salida de volcado de memoria.Posibles valores, que se pueden combinar mediante OR bit a bit (|) el operador, es como sigue:AFX_STACK_DUMP_TARGET_TRACE Sends generado mediante la macro de TRACE .La macro de TRACE genera el resultado en las compilaciones de depuración sólo; no genera ninguna salida en las versiones de lanzamiento.Además, TRACE se puede redirigir a otros destinos además del depurador.
Resultado del volcado deAFX_STACK_DUMP_TARGET_DEFAULTSends al destino predeterminado.Para una versión de depuración, salida va a la macro de TRACE .En una versión de lanzamiento, salida va al portapapeles.
AFX_STACK_DUMP_TARGET_CLIPBOARD Sends generado al portapapeles sólo.Los datos se coloca en el portapapeles como texto sin formato mediante el formato del Portapapeles de CF_TEXT .
AFX_STACK_DUMP_TARGET_BOTH Sends generado en el portapapeles y a la macro de TRACE , simultáneamente.
AFX_STACK_DUMP_TARGET_ODS Sends generado directamente el depurador mediante la función **OutputDebugString()**de Win32.Esta opción generará la salida del depurador de depuración y lanzará compilaciones cuando hay un depurador al proceso.AFX_STACK_DUMP_TARGET_ODS alcanza el depurador (si se adjunta) y no puede ser siempre redirigido.
Comentarios
El ejemplo siguiente refleja una única línea de salida generada de llamar a AfxDumpStack de un controlador del botón en una aplicación de cuadro de diálogo 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 ===
Cada línea en el resultado anterior indica la dirección de la llamada de función pasada, nombre de ruta de acceso completa del módulo que contiene la llamada de función, y del prototipo de función denominado.Si la llamada de función en la pila no ocurre en la dirección exacta de la función, un desplazamiento de bytes se muestra.
Por ejemplo, la tabla siguiente describe la primera línea arriba de salida:
Output |
Descripción |
---|---|
00427D55: |
La dirección de devolución de llamada de función última. |
DUMP2\DEBUG\DUMP2.EXE! |
La ruta de acceso completa del módulo que contiene la llamada de función. |
void AfxDumpStack(unsigned long) |
El prototipo de función denominado. |
+ 181 bytes |
El desplazamiento de bytes de la dirección del prototipo de función (en este caso, void AfxDumpStack(unsigned long)) al de (en este caso, 00427D55). |
AfxDumpStack está disponible en las versiones de depuración y de nondebug de las bibliotecas MFC; sin embargo, la función se vincula siempre estáticamente, incluso cuando el archivo ejecutable utiliza MFC en el archivo DLL compartido.En implementaciones de biblioteca compartida, la función se encuentra en la biblioteca de MFCS42.LIB (y sus variantes).
Para utilizar esta función correctamente:
El archivo IMAGEHLP.DLL debe encontrarse en la ruta.Si no tiene este archivo DLL, la función mostrará un mensaje de error.Vea Biblioteca de Ayuda de imagen para la información en el conjunto de funciones proporcionado por IMAGEHLP.
Los módulos que tienen marcos de la pila deben incluir información de depuración.Si no contienen información de depuración, la función continuará generando un seguimiento de la pila, pero la traza será menos detallado.
Requisitos
Header: afx.h