Función StackWalkEx (dbghelp.h)
Obtiene un seguimiento de pila.
Sintaxis
BOOL IMAGEAPI StackWalkEx(
[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] DWORD Flags
);
Parámetros
[in] MachineType
El tipo de arquitectura del equipo para el que se genera el seguimiento de la pila. Este parámetro puede ser uno de los valores siguientes.
Valor | Significado |
---|---|
|
Intel x86 |
|
Intel Itanium |
|
x64 (AMD64 o EM64T) |
[in] hProcess
Identificador del proceso para el que se genera el seguimiento de la pila. Si el autor de la llamada proporciona un puntero de devolución de llamada válido para el parámetro ReadMemoryRoutine , este valor no tiene que ser un identificador de proceso válido. Puede ser un token único y coherentemente igual para todas las llamadas a la función StackWalkEx . Si el controlador de símbolos se usa con StackWalkEx, use los mismos identificadores de proceso para las llamadas a cada función.
[in] hThread
Identificador del subproceso para el que se genera el seguimiento de la pila. Si el autor de la llamada proporciona un puntero de devolución de llamada válido para el parámetro ReadMemoryRoutine , este valor no tiene que ser un identificador de subproceso válido. Puede ser un token único y coherentemente igual para todas las llamadas a la función StackWalkEx .
[in, out] StackFrame
Puntero a una estructura de STACKFRAME_EX . Esta estructura recibe información para el siguiente marco, si la llamada de función se realiza correctamente.
[in, out] ContextRecord
Puntero a una estructura CONTEXT . Este parámetro solo es necesario cuando el parámetro MachineType no es IMAGE_FILE_MACHINE_I386. Sin embargo, se recomienda que este parámetro contenga un registro de contexto válido. Esto permite a StackWalkEx controlar una mayor variedad de situaciones.
Este contexto se puede modificar, por lo que no pase un registro de contexto que no se debe modificar.
[in, optional] ReadMemoryRoutine
Rutina de devolución de llamada que proporciona servicios de lectura de memoria. Cuando la función StackWalkEx necesita leer la memoria del espacio de direcciones del proceso, se usa la devolución de llamada ReadProcessMemoryProc64 .
Si este parámetro es NULL, la función usa una rutina predeterminada. En este caso, el parámetro hProcess debe ser un identificador de proceso válido.
Si este parámetro no es NULL, la aplicación debe implementar y registrar una función de devolución de llamada del controlador de símbolos que controla CBA_READ_MEMORY.
[in, optional] FunctionTableAccessRoutine
Rutina de devolución de llamada que proporciona acceso a la tabla de funciones en tiempo de ejecución para el proceso. Este parámetro es necesario porque la función StackWalkEx no tiene acceso a la tabla de funciones en tiempo de ejecución del proceso. Para obtener más información, vea FunctionTableAccessProc64.
El controlador de símbolos proporciona funciones que cargan y acceden a la tabla en tiempo de ejecución. Si se usan estas funciones, SymFunctionTableAccess64 se puede pasar como un parámetro válido.
[in, optional] GetModuleBaseRoutine
Rutina de devolución de llamada que proporciona una base de módulo para cualquier dirección virtual determinada. Este parámetro es obligatorio. Para obtener más información, vea GetModuleBaseProc64.
El controlador de símbolos proporciona funciones que cargan y mantienen la información del módulo. Si se usan estas funciones, SymGetModuleBase64 se puede pasar como un parámetro válido.
[in, optional] TranslateAddress
Rutina de devolución de llamada que proporciona traducción de direcciones para direcciones de 16 bits. Para obtener más información, vea TranslateAddressProc64.
La mayoría de los autores de llamadas de StackWalkEx pueden pasar de forma segura NULL para este parámetro.
[in] Flags
Combinación de cero o más marcas.
SYM_STKWALK_DEFAULT (0)
SYM_STKWALK_FORCE_FRAMEPTR (1)
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es TRUE.
Si se produce un error en la función, el valor devuelto es FALSE. Tenga en cuenta que StackWalkEx generalmente no establece el último código de error.
Comentarios
La función StackWalkEx proporciona un método portátil para obtener un seguimiento de pila. El uso de la función StackWalkEx se recomienda sobre escribir su propia función debido a todas las complejidades asociadas a la pila caminando en las plataformas. Además, hay opciones del compilador que hacen que la pila aparezca de forma diferente, en función de cómo se compile el módulo. Con esta función, la aplicación tiene un seguimiento de pila portátil que sigue funcionando como el compilador y el cambio del sistema operativo.
Se producirá un error en la primera llamada a esta función si addrPC,
Los miembros AddrFrame y AddrStack de la estructura de STACKFRAME64 pasados en el parámetro StackFrame no se inicializan.
Todas las funciones DbgHelp, como esta, son un único subproceso. Por lo tanto, es probable que las llamadas desde más de un subproceso a esta función producirán un comportamiento inesperado o daños en la memoria. Para evitarlo, debe sincronizar todas las llamadas simultáneas de más de un subproceso a esta función.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | dbghelp.h |
Library | DbgHelp.lib |
Archivo DLL | DbgHelp.dll |
Redistribuible | DbgHelp.dll 6.2 o posterior |