Funzione StackWalk64 (dbghelp.h)
Ottiene una traccia dello stack.
Sintassi
BOOL IMAGEAPI StackWalk64(
[in] DWORD MachineType,
[in] HANDLE hProcess,
[in] HANDLE hThread,
[in, out] LPSTACKFRAME64 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
);
Parametri
[in] MachineType
Tipo di architettura del computer per cui viene generata la traccia dello stack. Questo parametro può avere uno dei valori seguenti.
Valore | Significato |
---|---|
|
Intel x86 |
|
Intel Itanium |
|
x64 (AMD64 o EM64T) |
[in] hProcess
Handle per il processo per il quale viene generata la traccia 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 coerentemente uguale per tutte le chiamate alla funzione StackWalk64 . Se il gestore dei simboli viene usato con StackWalk64, usare gli stessi handle di processo per le chiamate a ogni funzione.
[in] hThread
Handle al thread per il quale viene generata la traccia 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 coerentemente uguale per tutte le chiamate alla funzione StackWalk64 .
[in, out] StackFrame
Puntatore a una struttura STACKFRAME64 . Questa struttura riceve informazioni per il frame successivo, se la chiamata alla funzione ha esito positivo.
[in, out] ContextRecord
Puntatore a una struttura 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. Ciò consente a StackWalk64 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 StackWalk64 deve leggere la memoria dallo spazio indirizzi del processo, viene usato il 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 dei 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 è necessario perché la funzione StackWalk64 non ha accesso alla tabella delle funzioni di runtime del processo. Per altre informazioni, vedere FunctionTableAccessProc64.
Il gestore dei simboli fornisce funzioni che caricano e accedono alla tabella di runtime. Se queste funzioni vengono usate, SymFunctionTableAccess64 può essere passata come parametro valido.
[in, optional] GetModuleBaseRoutine
Routine di callback che fornisce una base di moduli per qualsiasi indirizzo virtuale specificato. Questo parametro è obbligatorio. Per altre informazioni, vedere GetModuleBaseProc64.
Il gestore dei simboli fornisce funzioni che caricano e gestiscono le informazioni sul modulo. Se queste funzioni vengono usate, è possibile passare SymGetModuleBase64 come parametro valido.
[in, optional] TranslateAddress
Routine di callback che fornisce la traduzione degli indirizzi per indirizzi a 16 bit. Per altre informazioni, vedere TranslateAddressProc64.
La maggior parte dei chiamanti di StackWalk64 può passare in modo sicuro NULL per questo parametro.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è TRUE.
Se la funzione ha esito negativo, il valore restituito è FALSE. Si noti che StackWalk64 in genere non imposta l'ultimo codice di errore.
Commenti
La funzione StackWalk64 fornisce un metodo portabile per ottenere una traccia dello stack. L'uso della funzione StackWalk64 è consigliato per scrivere la propria funzione a causa di tutte le complessità associate allo stack a piedi 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 una traccia dello stack portabile che continua a funzionare come modifica del compilatore e del sistema operativo.
La prima chiamata a questa funzione avrà esito negativo se i membri AddrPC, AddrFrame e AddrStack 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 potrebbero causare un comportamento imprevisto o un danneggiamento della memoria. Per evitare questo problema, è necessario sincronizzare tutte le chiamate simultanee da più thread a questa funzione.
Questa funzione sostituisce la funzione StackWalk . Per altre informazioni, vedere Supporto della piattaforma aggiornato. StackWalk è definito come indicato di seguito in DbgHelp.h.
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define StackWalk StackWalk64
#else
BOOL
IMAGEAPI
StackWalk(
DWORD MachineType,
__in HANDLE hProcess,
__in HANDLE hThread,
__inout LPSTACKFRAME StackFrame,
__inout PVOID ContextRecord,
__in_opt PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
__in_opt PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
__in_opt PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
__in_opt PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
);
#endif
Requisiti
Piattaforma di destinazione | Windows |
Intestazione | dbghelp.h |
Libreria | DbgHelp.lib |
DLL | DbgHelp.dll |
Componente ridistribuibile | DbgHelp.dll 5.1 o versioni successive |