AfxDumpStack
Ta funkcja globalna może służyć do generowania obrazu bieżącego stosu.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Parametry
dwTarget
Wskazuje miejsce docelowe danych wyjściowych zrzutu.Możliwe wartości, które mogą być połączone za pomocą (wartość logiczną lub**|**) operator, są następujące:AFX_STACK_DUMP_TARGET_TRACE wysyła dane wyjściowe w postaci śledzenia makro.Śledzenia makro generuje dane wyjściowe w buduje debugowania tylko; w wydaniu buduje generuje żadnych danych wyjściowych.Ponadto śledzenia mogą zostać przekierowane do innych elementów docelowych oprócz debugera.
AFX_STACK_DUMP_TARGET_DEFAULT zrzut wysyła dane wyjściowe do domyślnego adresu docelowego.Kompilacja do debugowania, aby uzyskać dane wyjściowe trafia do śledzenia makro.W wydanej kompilacji dane wyjściowe trafia do Schowka.
AFX_STACK_DUMP_TARGET_CLIPBOARD wysyła dane wyjściowe tylko do Schowka.Dane są wklejane do Schowka jako zwykły tekst za pomocą CF_TEXT format Schowka.
AFX_STACK_DUMP_TARGET_BOTH wysyła dane wyjściowe do Schowka i do śledzenia makro, jednocześnie.
AFX_STACK_DUMP_TARGET_ODS wysyła dane wyjściowe bezpośrednio do debugera, za pomocą funkcji Win32 OutputDebugString().Ta opcja spowoduje generowania danych wyjściowych debugera w obu debugowania i zwolnij buduje, gdy jest dołączony debuger do procesu.AFX_STACK_DUMP_TARGET_ODS zawsze osiąga debugera (jeśli jest podłączony) i nie mogą być przekierowane.
Uwagi
W poniższym przykładzie odzwierciedla pojedynczy wiersz dane wyjściowe generowane z telefoniczną 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 ostatniego wywołania 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 stanie w dokładny adres funkcji, wyświetlany jest Przesunięcie bajtów.
Na przykład w poniższej tabeli opisano pierwszy wiersz wyniku powyżej:
Dane wyjściowe |
Opis |
---|---|
00427D55: |
Adres zwrotny ostatniego wywołania 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 wtedy, gdy korzysta z pliku wykonywalnego MFC w udostępnionym pliku DLL.W implementacjach współużytkowanej biblioteki funkcji znajduje się w MFCS42.Biblioteka LIB (i jego odmiany).
Aby użyć tej funkcji, pomyślnie:
W pliku IMAGEHLP.Biblioteka DLL musi być na ścieżce.Jeśli nie masz tej biblioteki DLL, funkcja wyświetli komunikat o błędzie.Zobacz Biblioteki Pomocy obrazu informacji na temat zestawu funkcji dostarczonych przez IMAGEHLP.
Moduły, które są ramki na stosie musi zawierać informacje debugowania.Jeśli nie zawierają informacji o debugowaniu, funkcja nadal będzie generować ślad stosu, ale będzie mniej szczegółowe śledzenie.
Wymagania
Nagłówek: afx.h