AfxDumpStack
Esta função global pode ser usada para gerar uma imagem da pilha atual.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Parâmetros
dwTarget
Indica o destino da saída despejo.Valores possíveis, que podem ser combinados (OR bit a bit**|**) operador, são os seguintes:AFX_STACK_DUMP_TARGET_TRACE envia saída por meio do rastreamento macro.O rastreamento macro gera saída em compilações de depuração; ele gera nenhuma saída em compilações de versão.Além disso, TRACE podem ser redirecionados para outros destinos além do depurador.
AFX_STACK_DUMP_TARGET_DEFAULT envia saída para o destino padrão de despejo.Para uma compilação de depuração, a saída vai para o rastreamento macro.Em uma versão de compilação, saída vai para a área de transferência.
AFX_STACK_DUMP_TARGET_CLIPBOARD envia a saída somente na área de transferência.Os dados são colocados na área de transferência como texto sem formatação usando o CF_TEXT formato de área de transferência.
AFX_STACK_DUMP_TARGET_BOTH envia a saída para a área de transferência e para o rastreamento macro, simultaneamente.
AFX_STACK_DUMP_TARGET_ODS envia saída diretamente para o depurador por meio de função de Win32 OutputDebugString().Esta opção irá gerar saída do depurador em ambos os depurar e liberar compilações quando um depurador é anexado ao processo.AFX_STACK_DUMP_TARGET_ODS sempre atinge o depurador (se estiver conectado) e não pode ser redirecionada.
Comentários
O exemplo a seguir reflete uma única linha da saída gerada a partir da chamada AfxDumpStack de um manipulador do botão em um aplicativo de caixa de diálogo do 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 linha na saída acima indica o endereço da última chamada de função, o nome de caminho completo do módulo que contém a chamada de função e o protótipo de função chamada.Se a chamada de função na pilha não acontecer no endereço exato da função, é mostrado um deslocamento de bytes.
Por exemplo, a tabela a seguir descreve a primeira linha da saída acima:
Saída |
Descrição |
---|---|
00427D55: |
O endereço de retorno da última chamada de função. |
DUMP2\DEBUG\DUMP2.EXE! |
O nome de caminho completo do módulo que contém a chamada de função. |
void AfxDumpStack(unsigned long) |
O protótipo de função chamada. |
+ 181 bytes |
O deslocamento em bytes do endereço do protótipo de função (nesse caso, void AfxDumpStack(unsigned long)) para o endereço de retorno (neste caso, 00427D55). |
AfxDumpStackestá disponível em versões de depuração e nondebug das bibliotecas MFC; No entanto, a função está sempre vinculada estaticamente, mesmo quando seu arquivo executável usa MFC em uma DLL compartilhada.Em implementações de biblioteca compartilhada, a função é encontrada no MFCS42.Biblioteca LIB (e suas variantes).
Para usar essa função com êxito:
O arquivo IMAGEHLP.DLL deve estar no seu caminho.Se você não tiver essa DLL, a função exibirá uma mensagem de erro.Consulte Biblioteca da Ajuda de imagem para obter informações sobre o conjunto de função fornecido pelo IMAGEHLP.
Os módulos que têm quadros na pilha devem incluir informações de depuração.Se eles não contêm informações de depuração, a função ainda gerará um rastreamento de pilha, mas o rastreamento serão menos detalhado.
Requisitos
Cabeçalho: Afx. h