Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ruft eine Stapelablaufverfolgung ab.
Syntax
BOOL IMAGEAPI StackWalk2(
[in] DWORD MachineType,
[in] HANDLE hProcess,
[in] HANDLE hThread,
[in, out] LPSTACKFRAME_EX StackFrame,
[in, out] PVOID ContextRecord,
[in, optional] PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
[in, optional] PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
[in, optional] PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
[in, optional] PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress,
[in, optional] PGET_TARGET_ATTRIBUTE_VALUE64 GetTargetAttributeValue,
[in] DWORD Flags
);
Parameter
[in] MachineType
Der Architekturtyp des Computers, für den die Stapelablaufverfolgung generiert wird. Dieser Parameter kann einer der folgenden Werte sein:
| Wert | Bedeutung |
|---|---|
|
IMAGE_FILE_MACHINE_I386 0x014c |
Intel x86 |
|
IMAGE_FILE_MACHINE_IA64 0x0200 |
Intel Itanium |
|
IMAGE_FILE_MACHINE_AMD64 0x8664 |
x64 (AMD64 oder EM64T) |
|
IMAGE_FILE_MACHINE_ARM64 0xaa64 |
ARM64 |
[in] hProcess
Ein Handle für den Prozess, für den die Stapelablaufverfolgung generiert wird. Wenn der Aufrufer einen gültigen Rückrufzeiger für die ReadMemoryRoutine Parameter bereitstellt, muss dieser Wert kein gültiges Prozesshandle sein. Es kann sich um ein Token sein, das eindeutig und konsistent für alle Aufrufe der StackWalk2--Funktion ist. Wenn der Symbolhandler mit StackWalk2verwendet wird, verwenden Sie die gleichen Prozesshandles für die Aufrufe jeder Funktion.
[in] hThread
Ein Handle für den Thread, für den die Stapelablaufverfolgung generiert wird. Wenn der Aufrufer einen gültigen Rückrufzeiger für die ReadMemoryRoutine Parameter bereitstellt, muss dieser Wert kein gültiger Threadhandle sein. Es kann sich um ein Token sein, das eindeutig und konsistent für alle Aufrufe der StackWalk2--Funktion ist.
[in, out] StackFrame
Ein Zeiger auf eine STACKFRAME_EX Struktur. Diese Struktur empfängt Informationen für den nächsten Frame, wenn der Funktionsaufruf erfolgreich ist.
[in, out] ContextRecord
Ein Zeiger auf eine ARM64_NT_CONTEXT Struktur. Dieser Parameter ist nur erforderlich, wenn der parameter MachineType nicht IMAGE_FILE_MACHINE_I386ist. Es wird jedoch empfohlen, dass dieser Parameter einen gültigen Kontextdatensatz enthält. Auf diese Weise können StackWalk2- eine größere Vielfalt von Situationen bewältigen.
Dieser Kontext kann geändert werden. Übergeben Sie daher keinen Kontextdatensatz, der nicht geändert werden sollte.
[in, optional] ReadMemoryRoutine
Eine Rückrufroutine, die Speicherlesedienste bereitstellt. Wenn die StackWalk2--Funktion Speicher aus dem Adressraum des Prozesses lesen muss, wird die ReadProcessMemoryProc64-Rückruffunktion verwendet.
Wenn dieser Parameter NULL-ist, verwendet die Funktion eine Standardroutine. In diesem Fall muss der hProcess-Parameter ein gültiges Prozesshandle sein.
Wenn dieser Parameter nicht NULL-ist, sollte die Anwendung eine Symbolhandlerrückruffunktion implementieren und registrieren, die CBA_READ_MEMORYbehandelt.
[in, optional] FunctionTableAccessRoutine
Eine Rückrufroutine, die Zugriff auf die Laufzeitfunktionstabelle für den Prozess bietet. Dieser Parameter ist erforderlich, da die StackWalk2--Funktion keinen Zugriff auf die Laufzeitfunktionstabelle des Prozesses hat. Weitere Informationen finden Sie unter FunctionTableAccessProc64 callback function.
Der Symbolhandler stellt Funktionen bereit, die die Laufzeittabelle laden und darauf zugreifen. Wenn diese Funktionen verwendet werden, kann die SymFunctionTableAccess64-Funktion als gültiger Parameter übergeben werden.
[in, optional] GetModuleBaseRoutine
Eine Rückrufroutine, die eine Modulbasis für jede bestimmte virtuelle Adresse bereitstellt. Dieser Parameter ist erforderlich. Weitere Informationen finden Sie unter PGET_MODULE_BASE_ROUTINE64 Rückruffunktion.
Der Symbolhandler stellt Funktionen bereit, die Modulinformationen laden und verwalten. Wenn diese Funktionen verwendet werden, kann die SymGetModuleBase64-Funktion als gültiger Parameter übergeben werden.
[in, optional] TranslateAddress
Eine Rückrufroutine, die Adressübersetzung für 16-Bit-Adressen bereitstellt. Weitere Informationen finden Sie unter PTRANSLATE_ADDRESS_ROUTINE64 Rückruffunktion.
Die meisten Aufrufer von StackWalk2- können sicher NULL- für diesen Parameter übergeben.
[in, optional] GetTargetAttributeValue
Eine Rückrufroutine, die die Werte von Zielattributen bereitstellt, die zum Durchlaufen des Stapels erforderlich sind. Weitere Informationen finden Sie unter PGET_TARGET_ATTRIBUTE_VALUE64 Rückruffunktion.
Viele Aufrufer von StackWalk2- können sicher NULL- für diesen Parameter übergeben. Aufrufer auf ARM64-Plattformen, die die Zeigerauthentifizierung verwenden können, sollten einen Rückruf bereitstellen.
[in] Flags
Eine Kombination aus null oder mehr Flags.
SYM_STKWALK_DEFAULT (0)
SYM_STKWALK_FORCE_FRAMEPTR (1)
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE.
Wenn die Funktion fehlschlägt, ist der Rückgabewert FALSE. Beachten Sie, dass StackWalk2- im Allgemeinen nicht den letzten Fehlercode festgelegt.
Bemerkungen
Die StackWalk2--Funktion stellt eine tragbare Methode zum Abrufen einer Stapelablaufverfolgung bereit. Die Verwendung der StackWalk2--Funktion wird empfohlen, ihre eigene Funktion zu schreiben, da alle Komplexitäten im Zusammenhang mit Stack Walking auf Plattformen. Darüber hinaus gibt es Compileroptionen, die dazu führen, dass der Stapel unterschiedlich angezeigt wird, je nachdem, wie das Modul kompiliert wird. Mithilfe dieser Funktion verfügt Ihre Anwendung über eine portable Stapelablaufverfolgung, die weiterhin als Compiler- und Betriebssystemänderung funktioniert.
Der erste Aufruf dieser Funktion schlägt fehl, wenn die AddrPC-, AddrFrame-und AddrStack Member der STACKFRAME64 Struktur, die im StackFrame--Parameter übergeben werden, nicht initialisiert werden.
Alle DbgHelp-Funktionen, z. B. diese, sind single threaded. Daher führen Aufrufe von mehr als einem Thread zu dieser Funktion wahrscheinlich zu unerwartetem Verhalten oder Speicherbeschädigung. Um dies zu vermeiden, müssen Sie alle gleichzeitigen Aufrufe von mehr als einem Thread mit dieser Funktion synchronisieren.
Anforderungen
| Anforderung | Wert |
|---|---|
| Zielplattform- | Fenster |
| Header- | dbghelp.h |
| Library | DbgHelp.lib |
| DLL- | DbgHelp.dll |
| redistributable | DbgHelp.dll 10.0.22621.4602 oder höher |
Siehe auch
FunctionTableAccessProc64-Rückruffunktion
ReadProcessMemoryProc64-Rückruffunktion
SymFunctionTableAccess64-Funktion