Freigeben über


StackWalk2-Funktion (dbghelp.h)

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

ARM64_NT_CONTEXT Struktur

DbgHelp-Funktionen

FunctionTableAccessProc64-Rückruffunktion

ReadProcessMemoryProc64-Rückruffunktion

STACKFRAME_EX Struktur

SymFunctionTableAccess64-Funktion

SymGetModuleBase64-Funktion

PTRANSLATE_ADDRESS_ROUTINE64 Rückruffunktion

PGET_TARGET_ATTRIBUTE_VALUE64 Rückruffunktion