Partilhar via


Carregamento de símbolos

O manipulador de símbolos carregará símbolos quando você chamar a função SymInitialize com o parâmetro fInvadeProcess definido como TRUE ou quando você chamar a funçãoSymLoadModuleEx para especificar um módulo. Em ambos os casos, o manipulador de símbolos carrega os símbolos ou adia o carregamento do símbolo até que os símbolos sejam solicitados, dependendo das opções definidas pela funçãoSymSetOptions.

O manipulador de símbolos pode ser usado para recuperar informações simbólicas para qualquer módulo; ele não precisa ser associado a um processo especificado na chamada SymInitialize. Para usar um módulo arbitrário, especifique o caminho completo para a imagem do módulo no parâmetro ImageName. Você pode usar um caminho para qualquer módulo executável que tenha informações de depuração (.exe, .dll, .drv, .sys, .scr, .cplou .com). Use o parâmetro BaseOfDll para especificar qualquer endereço de carregamento; os endereços dos símbolos serão então baseados nesse endereço.

Pode não ser necessário manter um módulo de símbolo carregado durante toda a duração de uma aplicação. Para liberar o módulo de símbolo da lista de módulos do manipulador de símbolos, use a funçãoSymUnloadModule64. Esta função libera a memória alocada para o módulo de símbolo. Para usar símbolos para esse módulo novamente, você deve chamar a funçãoSymLoadModuleEx, mesmo que a opção de carregamento adiado do símbolo esteja definida.

Diagnosticando problemas de carregamento de símbolos

Para exibir todas as tentativas de carregar símbolos, chame SymSetOptions com SYMOPT_DEBUG. Isso faz com que o DbgHelp chame a funçãoOutputDebugString com informações detalhadas sobre pesquisas de símbolos, como os diretórios que está pesquisando e mensagens de erro. Se o seu código usar SymRegisterCallback64, o DbgHelp chamará a sua função de retorno de chamada em vez de chamar OutputDebugString. O parâmetro ActionCode é definido como CBA_DEBUG_INFO e o parâmetro CallbackData é uma cadeia de caracteres que pode ser exibida.

Para permitir que essa saída de depuração seja exibida no console sem alterar o código-fonte, defina a variável de ambiente DBGHELP_DBGOUT como um valor deNULL não antes de chamar a funçãoSymInitialize. Para registrar as informações em um arquivo, defina a variável de ambiente DBGHELP_LOG como o nome do arquivo de log a ser usado.

Observe que esses recursos devem ser usados somente quando necessário. Eles podem retardar o carregamento de símbolos de módulos que contêm muitos símbolos.