Compartir a través de


Carga de símbolos

El controlador de símbolos cargará los símbolos al llamar a la función SymInitialize con el parámetro fInvadeProcess establecido en TRUE o al llamar a la función SymLoadModuleEx para especificar un módulo. En cualquier caso, el controlador de símbolos carga los símbolos o aplaza la carga de símbolos hasta que se soliciten, en función de las opciones establecidas por la función SymSetOptions.

El controlador de símbolos se puede usar para recuperar información simbólica de cualquier módulo; no es necesario que esté asociado a un proceso especificado en la llamada SymInitialize. Para usar un módulo arbitrario, especifique la ruta de acceso completa a la imagen del módulo en el parámetro ImageName. Puede usar una ruta de acceso a cualquier módulo ejecutable que tenga información de depuración (.exe, .dll, .drv, .sys, .scr, .cpl o .com). Use el parámetro BaseOfDll para especificar cualquier dirección de carga y, a continuación, las direcciones de los símbolos se basarán en esa dirección.

Puede que no sea necesario mantener cargado un módulo de símbolos durante la duración de una aplicación. Para liberar el módulo de símbolos de la lista de módulos del controlador de símbolos, use la función SymUnloadModule64. Esta función libera la memoria asignada para el módulo de símbolos. Para volver a usar símbolos para ese módulo, debe llamar a la función SymLoadModuleEx incluso si se establece la opción de carga diferida de símbolos.

Diagnóstico de problemas de carga de símbolos

Para ver todos los intentos de carga de símbolos, llame a SymSetOptions con SYMOPT_DEBUG. Esto hace que DbgHelp llame a la función OutputDebugString con información detallada sobre las búsquedas de símbolos, como los directorios que está buscando y los mensajes de error. Si el código usa SymRegisterCallback64, DbgHelp llamará a la función de devolución de llamada en lugar de llamar a OutputDebugString. El parámetro ActionCode se establece en CBA_DEBUG_INFO y el parámetro CallbackData es una cadena que se puede mostrar.

Para permitir que esta salida de depuración se muestre en la consola sin cambiar el código fuente, establezca la variable de entorno DBGHELP_DBGOUT en un valor distinto de NULL antes de llamar a la función SymInitialize. Para registrar la información en un archivo, establezca la variable de entorno DBGHELP_LOG en el nombre del archivo de registro que se va a usar.

Tenga en cuenta que estas características solo se deben usar cuando sea necesario. Pueden ralentizar la carga de símbolos de módulos que contienen muchos símbolos.