Carga de un módulo de símbolos
Si una aplicación no llama a la función SymInitialize con el parámetro fInvadeProcess establecido en TRUE, debe cargar símbolos para un módulo cuando resulten necesarios. Para cargar un módulo de símbolos a petición, la aplicación puede llamar a la función SymLoadModuleEx con una ruta de acceso completa a un nombre de módulo. Cuando se carga el módulo, el controlador de símbolos cargará los símbolos inmediatamente o aplazará la carga, en función de las opciones establecidas mediante la función SymSetOptions.
El código siguiente carga un módulo de símbolos. Tenga en cuenta que supone que ha inicializado el controlador de símbolos mediante el código de Inicializar el controlador de símbolos.
TCHAR szImageName[MAX_PATH] = TEXT("foo.dll");
DWORD64 dwBaseAddr = 0;
if (SymLoadModuleEx(hProcess, // target process
NULL, // handle to image - not used
szImageName, // name of image file
NULL, // name of module - not required
dwBaseAddr, // base address - not required
0, // size of image - not required
NULL, // MODLOAD_DATA used for special cases
0)) // flags - not required
{
// SymLoadModuleEx returned success
}
else
{
// SymLoadModuleEx failed
DWORD error = GetLastError();
printf("SymLoadModuleEx returned error : %d\n", error);
}
Tenga en cuenta que szImageName puede ser una ruta de acceso a cualquier módulo ejecutable que tenga información de depuración (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Además, dwBaseAddr es la dirección base del módulo de símbolos que se va a cargar. Si este valor es 0, el controlador de símbolos obtendrá la dirección base del módulo de símbolos especificado.
Temas relacionados