Udostępnij za pośrednictwem


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

Zobacz też

Informacje

afxDump (CDumpContext w MFC)

Koncepcje

Makra i funkcje globalne MFC