Condividi tramite


AfxDumpStack

Questa funzione globale può essere utilizzata per generare un'immagine dello stack corrente.

void AFXAPI AfxDumpStack(
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);

Parametri

  • dwTarget
    Indica la destinazione dell'output del dump.Valori possibili, che possono essere combinate utilizzando il bit per bit (|) l'operatore, è la seguente:

    • AFX_STACK_DUMP_TARGET_TRACE invia l'output per utilizzare la macro di ANALISI .La macro TRACE generato l'output nelle build di debug solo; non genera output nelle build di rilascio.Inoltre, TRACE può essere reindirizzati ad altri database di destinazione oltre al debugger.

    • AFX_STACK_DUMP_TARGET_DEFAULT invia il dump restituito alla destinazione predefinita.Per una build di debug, l'output di andare alla macro TRACE.In una build di rilascio, l'output viene inserito negli Appunti.

    • AFX_STACK_DUMP_TARGET_CLIPBOARD invia l'output negli Appunti.I dati vengono inseriti negli Appunti come testo normale utilizzando il formato degli Appunti di CF_TEXT .

    • AFX_STACK_DUMP_TARGET_BOTH invia l'output negli Appunti e alla macro TRACE, contemporaneamente.

    • AFX_STACK_DUMP_TARGET_ODS invia l'output direttamente al debugger di utilizza la funzione Win32 OutputDebugString().Questa opzione genera l'output del debugger sia in modalità debug che nelle build di rilascio quando è associato un debugger al processo.AFX_STACK_DUMP_TARGET_ODS sempre raggiunge il debugger (se è connesso) e non può essere reindirizzati.

Note

Nell'esempio riportato di seguito riflette una sola riga dell'output generato da chiamare AfxDumpStack da un gestore del pulsante in un'applicazione della finestra di dialogo 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 ===

Ogni riga nell'output precedente indica l'indirizzo dell'ultima chiamata di funzione, del nome di percorso completo del modulo che contiene la chiamata di funzione e il prototipo di funzione chiamata.Se la chiamata di funzione nello stack non si verifica all'indirizzo esatto della funzione, un offset di byte viene visualizzato.

Ad esempio, la tabella seguente vengono descritte la prima riga dell'output:

Output

Descrizione

00427D55:

L'indirizzo di ritorno dell'ultima chiamata di funzione.

DUMP2\DEBUG\DUMP2.EXE!

Il nome di percorso completo del modulo che contiene la chiamata di funzione.

void AfxDumpStack(unsigned long)

Il prototipo di funzione chiamata.

+ 181 bytes

L'offset in byte dall'indirizzo del prototipo di funzione (in questo caso, void AfxDumpStack(unsigned long)) all'indirizzo (in questo caso, 00427D55).

AfxDumpStack è disponibile nelle versioni di debug e di non di debug delle librerie MFC; tuttavia, la funzione è sempre collegata in modo statico, anche quando il file eseguibile utilizza MFC in una DLL condivisa.Nelle implementazioni della condividere-raccolta, la funzione viene trovata nella raccolta di MFCS42.LIB (e nelle relative varianti).

Per utilizzare questa funzione correttamente:

  • Il file IMAGEHLP.DLL deve trovarsi nel percorso.Se non si dispone di questa DLL, la funzione viene visualizzato un messaggio di errore.Vedere Librerie della guida di immagine per informazioni sul set di funzione fornito da IMAGEHLP.

  • I moduli che dispongono di frame nello stack devono includere informazioni di debug.Se non sono disponibili informazioni di debug, nuovamente la funzione genera una traccia dello stack, ma l'analisi sarà meno dettagliata.

Requisiti

Header: afx.h

Vedere anche

Riferimenti

afxDump (CDumpContext in MFC)

Concetti

Macro MFC e Globals