Condividi tramite


Funzione StackWalk2 (dbghelp.h)

Ottiene un'analisi dello stack.

Sintassi

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
);

Parametri

[in] MachineType

Tipo di architettura del computer per cui viene generata l'analisi dello stack. Questo parametro può essere uno dei valori seguenti.

Valore Significato
IMAGE_FILE_MACHINE_I386
0x014c
Intel x86
IMAGE_FILE_MACHINE_IA64
0x0200
Intel Itanium
IMAGE_FILE_MACHINE_AMD64
0x8664
x64 (AMD64 o EM64T)
IMAGE_FILE_MACHINE_ARM64
0xaa64
ARM64

[in] hProcess

Handle per il processo per il quale viene generata l'analisi dello stack. Se il chiamante fornisce un puntatore di callback valido per il parametro ReadMemoryRoutine, questo valore non deve essere un handle di processo valido. Può essere un token univoco e coerente per tutte le chiamate alla funzione StackWalk2. Se il gestore dei simboli viene usato con StackWalk2, usare lo stesso handle di processo per le chiamate a ogni funzione.

[in] hThread

Handle per il thread per il quale viene generata l'analisi dello stack. Se il chiamante fornisce un puntatore di callback valido per il parametro ReadMemoryRoutine, questo valore non deve essere un handle di thread valido. Può essere un token univoco e coerente per tutte le chiamate alla funzione StackWalk2.

[in, out] StackFrame

Puntatore a una struttura STACKFRAME_EX. Questa struttura riceve informazioni per il frame successivo, se la chiamata di funzione ha esito positivo.

[in, out] ContextRecord

Puntatore a una struttura ARM64_NT_CONTEXT. Questo parametro è obbligatorio solo quando il parametro MachineType non è IMAGE_FILE_MACHINE_I386. È tuttavia consigliabile che questo parametro contenga un record di contesto valido. In questo modo StackWalk2 di gestire una maggiore varietà di situazioni.

Questo contesto può essere modificato, quindi non passare un record di contesto che non deve essere modificato.

[in, optional] ReadMemoryRoutine

Routine di callback che fornisce servizi di lettura della memoria. Quando la funzione StackWalk2 deve leggere la memoria dallo spazio degli indirizzi del processo, viene usata la funzione di callback ReadProcessMemoryProc64 .

Se questo parametro è NULL, la funzione usa una routine predefinita. In questo caso, il parametro hProcess deve essere un handle di processo valido.

Se questo parametro non è NULL, l'applicazione deve implementare e registrare una funzione di callback del gestore di simboli che gestisce CBA_READ_MEMORY.

[in, optional] FunctionTableAccessRoutine

Routine di callback che fornisce l'accesso alla tabella delle funzioni di runtime per il processo. Questo parametro è obbligatorio perché la funzione StackWalk2 non ha accesso alla tabella delle funzioni di runtime del processo. Per altre informazioni, vedere funzione di callback FunctionTableAccessProc64.

Il gestore dei simboli fornisce funzioni che caricano e accedono alla tabella di runtime. Se vengono usate queste funzioni, la funzione SymFunctionTableAccess64 può essere passata come parametro valido.

[in, optional] GetModuleBaseRoutine

Routine di callback che fornisce una base del modulo per qualsiasi indirizzo virtuale specificato. Questo parametro è obbligatorio. Per altre informazioni, vedere PGET_MODULE_BASE_ROUTINE64 funzione di callback.

Il gestore dei simboli fornisce funzioni che caricano e mantengono le informazioni sul modulo. Se si usano queste funzioni, la funzione SymGetModuleBase64 può essere passata come parametro valido.

[in, optional] TranslateAddress

Routine di callback che fornisce la conversione degli indirizzi per gli indirizzi a 16 bit. Per altre informazioni, vedere PTRANSLATE_ADDRESS_ROUTINE64 funzione di callback.

La maggior parte dei chiamanti di StackWalk2 può passare in modo sicuro NULL per questo parametro.

[in, optional] GetTargetAttributeValue

Routine di callback che fornisce i valori degli attributi di destinazione necessari per esaminare lo stack. Per altre informazioni, vedere PGET_TARGET_ATTRIBUTE_VALUE64 funzione di callback.

Molti chiamanti di StackWalk2 possono passare in modo sicuro NULL per questo parametro. I chiamanti su piattaforme ARM64 che possono usare l'autenticazione del puntatore devono fornire un callback.

[in] Flags

Combinazione di zero o più flag.

SYM_STKWALK_DEFAULT (0)

SYM_STKWALK_FORCE_FRAMEPTR (1)

Valore restituito

Se la funzione ha esito positivo, il valore restituito è TRUE.

Se la funzione non riesce, il valore restituito viene FALSE. Si noti che stackwalk2 in genere non imposta l'ultimo codice di errore.

Osservazioni

La funzione StackWalk2 fornisce un metodo portabile per ottenere un'analisi dello stack. È consigliabile usare la funzione StackWalk2 per scrivere una funzione personalizzata a causa di tutte le complessità associate allo stack walking sulle piattaforme. Sono inoltre disponibili opzioni del compilatore che causano la visualizzazione dello stack in modo diverso, a seconda della modalità di compilazione del modulo. Usando questa funzione, l'applicazione dispone di un'analisi dello stack portabile che continua a funzionare man mano che il compilatore e il sistema operativo cambiano.

La prima chiamata a questa funzione avrà esito negativo se il AddrPC, AddrFramee AddrStack membri della struttura STACKFRAME64 passati nel parametro StackFrame non vengono inizializzati.

Tutte le funzioni DbgHelp, ad esempio questa, sono a thread singolo. Pertanto, le chiamate da più thread a questa funzione genereranno probabilmente un comportamento imprevisto o un danneggiamento della memoria. Per evitare questo problema, è necessario sincronizzare tutte le chiamate simultanee da più thread a questa funzione.

Fabbisogno

Requisito Valore
piattaforma di destinazione Finestre
intestazione dbghelp.h
libreria DbgHelp.lib
dll DbgHelp.dll
Ridistribuibile DbgHelp.dll 10.0.22621.4602 o versione successiva

Vedere anche

ARM64_NT_CONTEXT struttura

DbgHelp Functions

funzione di callback FunctionTableAccessProc64

funzione di callback ReadProcessMemoryProc64

STACKFRAME_EX struttura

funzione SymFunctionTableAccess64

funzione SymGetModuleBase64

PTRANSLATE_ADDRESS_ROUTINE64 funzione di callback

PGET_TARGET_ATTRIBUTE_VALUE64 funzione di callback