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 (OR **|**l'operatore), è la seguente:AFX_STACK_DUMP_TARGET_TRACE invia l'output per utilizzare la macro di TRACCIA. La macro di TRACCIA genera output nelle build di debug solo; non genera output nelle build di rilascio. Inoltre, TRACCIA può essere reindirizzati ad altre destinazioni 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 di TRACCIA. In una build di rilascio, l'output viene inserito negli Appunti.
AFX_STACK_DUMP_TARGET_CLIPBOARD invia l'output solo 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 di TRACCIA, contemporaneamente.
AFX_STACK_DUMP_TARGET_ODS invia l'output direttamente al debugger per utilizzare la funzione Win32 OutputDebugString(). Questa opzione genera l'output del debugger e debug che nelle build di rilascio quando è associato un debugger al processo. AFX_STACK_DUMP_TARGET_ODS sempre raggiunge il debugger se è associato) e non è possibile reindirizzare.
Note
L'esempio riflette in una sola riga dell'output generato da chiamare AfxDumpStack da un gestore di pulsanti 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 dell'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 è indicato.
Ad esempio, la tabella seguente vengono descritte la prima riga di su restituito:
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 in debug e non nelle versioni 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 di disporre libreria, la funzione si trova nella libreria 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 dato 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 meno verrà dettagliata.
Requisiti
Intestazione: afx.h