Compartir a través de


Inicialización del controlador de símbolos

En el código siguiente se muestra cómo inicializar el controlador de símbolos. La función SymSetOptions aplaza la carga de símbolos hasta que se solicita información de símbolos. El código carga los símbolos de cada módulo del proceso especificado pasando un valor de TRUE para el parámetro bInvade de la función SymInitialize . (Esta función llama a la función SymLoadModule64 para cada módulo que el proceso se ha asignado a su espacio de direcciones).

Si el proceso especificado no es el proceso que llamó a SymInitialize, el código pasa un identificador de proceso como primer parámetro de SymInitialize.

Si se especifica NULL como segundo parámetro de SymInitialize , se indica que el controlador de símbolos debe usar la ruta de acceso de búsqueda predeterminada para buscar archivos de símbolos. Para obtener información detallada sobre cómo el controlador de símbolos localiza los archivos de símbolos o cómo una aplicación puede especificar una ruta de búsqueda de símbolos, consulte Rutas de acceso de símbolos.

DWORD  error;
HANDLE hCurrentProcess;
HANDLE hProcess;

SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);

hCurrentProcess = GetCurrentProcess();

if (!DuplicateHandle(hCurrentProcess, hCurrentProcess, hCurrentProcess, &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
    // DuplicateHandle failed
    error = GetLastError();
    printf("DuplicateHandle returned error : %d\n", error);
    return FALSE;
}

if (!SymInitialize(hProcess, NULL, TRUE))
{
    // SymInitialize failed
    error = GetLastError();
    printf("SymInitialize returned error : %d\n", error);
    return FALSE;
}