AfxDumpStack
Tej funkcji globalnych, można wygenerować obraz bieżącego stosu.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Parametry
dwTarget
Wskazuje docelowy zrzutu danych wyjściowych.Możliwe wartości, które mogą być połączone za pomocą logiczną lub)|) operator, są następujące:AFX_STACK_DUMP_TARGET_TRACE wysyła dane wyjściowe z śledzenia makro.Śledzenia makro generuje dane wyjściowe w kompilacjach debugowania tylko; generuje żadnych danych wyjściowych w trybie budowania wersji.Ponadto śledzenia mogą zostać przekierowane do innych celów poza debugera.
AFX_STACK_DUMP_TARGET_DEFAULT wysyła zrzutu danych wyjściowych do domyślnego obiektu docelowego.Budowania debug, dane wyjściowe prowadzi do śledzenia makro.W wydanej kompilacji wyjście prowadzi do Schowka.
AFX_STACK_DUMP_TARGET_CLIPBOARD wysyła dane wyjściowe do Schowka tylko.Dane są umieszczane w Schowku jako zwykły tekst za pomocą CF_TEXT format Schowka.
AFX_STACK_DUMP_TARGET_BOTH wysyła dane wyjściowe do Schowka i śledzenia makro, jednocześnie.
AFX_STACK_DUMP_TARGET_ODS wysyła dane wyjściowe bezpośrednio do debugera z wykorzystaniem funkcji Win32 OutputDebugString().Ta opcja będzie generować danych wyjściowych debugera w obu debugowania i zwolnij kompilacje, gdy jest dołączony debuger do procesu.AFX_STACK_DUMP_TARGET_ODS zawsze osiągnie debuger (jeśli jest dołączony) i nie mogą być przekierowane.
Uwagi
W poniższym przykładzie odzwierciedla pojedynczy wiersz danych wyjściowych generowanych wywołania AfxDumpStack z obsługi przycisku w aplikacji MFC, okno dialogowe:
=== 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 ===
Każdy wiersz w powyższych danych wyjściowych wskazuje adres ostatnie wywołanie funkcji pełną nazwę ścieżki modułu, który zawiera wywołanie funkcji i prototyp funkcji o nazwie.Jeśli wywołanie funkcji na stosie nie dzieje się na dokładny adres funkcji, wyświetlany jest Przesunięcie bajtów.
Na przykład w poniższej tabeli opisano pierwszy wiersz powyżej dane wyjściowe:
Dane wyjściowe |
Opis |
---|---|
00427D55: |
Adres zwrotny ostatnie wywołanie funkcji. |
DUMP2\DEBUG\DUMP2.EXE! |
Pełna ścieżka nazwa modułu, który zawiera wywołanie funkcji. |
void AfxDumpStack(unsigned long) |
Prototyp funkcji o nazwie. |
+ 181 bytes |
Przesunięcie w bajtach, od adresu prototyp funkcji (w tym przypadku void AfxDumpStack(unsigned long)) na adres zwrotny (w tym przypadku 00427D55). |
AfxDumpStackjest dostępna w wersjach debugowania i nondebug biblioteki MFC; Jednak funkcja jest zawsze połączony statycznie, nawet w przypadku, gdy plik wykonywalny używa MFC w udostępnionym pliku DLL.W implementacjach współużytkowanej biblioteki funkcji można znaleźć w MFCS42.Biblioteka LIB (i jego odmiany).
Aby użyć tej funkcji pomyślnie:
Pliku IMAGEHLP.Biblioteka DLL musi być na ścieżce.Jeśli nie masz tej biblioteki DLL, funkcja zostanie wyświetlony komunikat o błędzie.Zobacz Obrazu Pomoc biblioteki do informacji na temat zestawu funkcji, świadczone przez IMAGEHLP.
Moduły, które mają ramek na stosie musi zawierać informacje debugowania.Jeśli nie zawierają informacji o debugowaniu, funkcja nadal spowoduje śledzenie stosu, ale śledzenia będzie mniej szczegółowe.
Wymagania
Nagłówek: afx.h