Partilhar via


Carregando um módulo de símbolos

Se uma aplicação não chamar a funçãoSymInitialize com o parâmetro fInvadeProcess definido como TRUE, ela deverá carregar símbolos para um módulo quando eles forem necessários. Para carregar um módulo de símbolo sob demanda, o aplicativo pode chamar a funçãoSymLoadModuleEx com um caminho completo para um nome de módulo. Quando o módulo é carregado, o manipulador de símbolos carregará os símbolos imediatamente ou adiará a carga, dependendo das opções definidas usando a funçãoSymSetOptions.

O código a seguir carrega um módulo de símbolo. Observe que ele pressupõe que você tenha inicializado o manipulador de símbolos usando o código em Inicializando o manipulador 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);
}

Observe que szImageName pode ser um caminho para qualquer módulo executável que tenha informações de depuração (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Além disso, dwBaseAddr é o endereço base do módulo de símbolo a ser carregado. Se esse valor for 0, o manipulador de símbolos obterá o endereço base do módulo de símbolo especificado.

Descarregando um módulo de símbolos