Partilhar via


Suporte a símbolos

Quando o Windows Performance Analyzer (WPA) está configurado corretamente, o WPA mostra nomes simbólicos dos arquivos de símbolo para endereços encontrados na gravação.

Para decodificar símbolos, as ferramentas devem localizar os arquivos de banco de dados do programa, conhecidos como arquivos PDB (banco de dados de programa) ou arquivos de símbolo, para criar pilhas de chamadas completas. O compilador e o vinculador geram arquivos PDB quando o sistema cria um componente. A Microsoft fornece os arquivos de banco de dados do programa para muitos produtos da Microsoft em um servidor de símbolos online. As Ferramentas de Depuração da Microsoft para Windows e WPA usam o servidor de símbolos online para pesquisar informações de símbolo. Portanto, o computador deverá estar conectado à Internet se os arquivos de símbolo não forem copiados localmente. O Kit de Ferramentas de Desempenho do Windows usa a mesma infraestrutura de decodificação de símbolo que o depurador do Windows ,Windbg.exe. Para obter mais informações, consulte WinDbg.

Para configurar o suporte a símbolos, você deve definir a variável de ambiente _NT_SYMBOL_PATH. O exemplo a seguir define o caminho do símbolo para usar o servidor de símbolos públicos da Microsoft junto com um repositório downstream em C:\symbols:

set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols

Observe que este exemplo é uma única linha de comando.

A URL neste caminho de símbolo especifica o servidor de símbolos online da Microsoft. O caminho entre os asteriscos (C:\symbols) especifica o repositório downstream. Esse é um cache local no qual o sistema de resolução de símbolos mantém arquivos de símbolo. As Ferramentas do WPA também decodificam símbolos de componentes que você desenvolve. Adicione um ou mais caminhos para _NT_SYMBOL_PATH que contêm os arquivos PDB para os componentes que você deseja registrar. Por exemplo, o exemplo a seguir mostra como o caminho foi configurado para o exemplo anterior:

set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*

Quando o Xperf ou o WPA decodifica símbolos, o Xperf ou o WPA armazena em cache uma versão condensada dos arquivos de símbolo originais, ou PDBs, no disco no diretório \symcache . Para fazer isso, o Xperf ou o WPA usa os símbolos disponíveis no momento. Os símbolos do sistema operacional que estão disponíveis fora da Microsoft são símbolos públicos. Esses símbolos contêm menos informações do que símbolos privados internos. Em testes de caixa preta, símbolos públicos também podem incluir informações incorretas. Símbolos privados, que são mais confiáveis, podem ser obtidos sob acordos de não divulgação. Se um usuário tiver decodificado uma gravação usando símbolos públicos e o usuário obtiver símbolos privados, o usuário deverá limpar o diretório \symcache antes que o Xperf ou o WPA possa descobrir os novos símbolos privados.

Solução de problemas de decodificação de símbolo

O suporte à decodificação de símbolos é complexo. Os seguintes requisitos devem ser atendidos:

  • Você deve especificar -symbols na linha de comando Xperf ou selecionar Carregar Símbolos no menu Rastreamento no WPA depois de abrir uma gravação.

  • As variáveis de ambiente devem ser configuradas corretamente. Para obter mais informações sobre xperf, consulte símbolos.

  • O arquivo de gravação de kernel ETW deve ter sido interrompido e mesclado corretamente. Para obter mais informações, consulte Parando uma gravação.

  • O WPR (Gravador de Desempenho do Windows) ou WPA mescla o arquivo de gravação de usuário ETW com um arquivo de gravação de kernel que é feito ao mesmo tempo no mesmo computador.

  • Você deve ter acesso às fontes binárias e de símbolo que _NT_SYMBOL_PATH especifica. Se você usar um servidor de símbolos, o servidor de símbolos geralmente será apenas um redirecionador. Nesse caso, você deve ter acesso ao servidor de símbolos e aos sites para os quais o servidor de símbolos aponta que hospedam os binários e símbolos.

  • _NT_SYMBOL_PATH deve apontar para os arquivos corretos. Se os arquivos existirem de um build ou arquitetura diferente, os arquivos não funcionarão. Se a versão dos arquivos binários do aplicativo não for a mesma versão que os símbolos para os quais _NT_SYMBOL_PATH aponta, você não poderá exibir pilhas de chamadas.

    Para descartar uma incompatibilidade de símbolo, use Symchk.exe da distribuição Ferramentas de Depuração para Windows para garantir que os símbolos correspondam aos arquivos de símbolo no computador no qual a gravação foi feita. Por exemplo:

    symchk /v <local_file> /s <sympath_to_name.pdb>
    

    Para descartar uma incompatibilidade binária, use o fc /b comando para garantir que os binários no computador no qual a gravação foi feita correspondam aos binários no compartilhamento suspenso. Por exemplo:

    fc /b <local_file> <drop_share_file>
    
  • No Xperf, você deve capturar a gravação do kernel ETW usando pelo menos os PROC_THREAD+LOADER sinalizadores. Esses sinalizadores fornecem informações básicas sobre o tempo de vida do processo e intervalos de endereços virtuais de imagem na memória do processo. Essas informações ajudam o XPerf a decodificar endereços virtuais para imagens e símbolos.

    Para verificar se esses sinalizadores foram habilitados na gravação do kernel ETW, marcar que os eventos Xperf -process (Criar, Excluir, Iniciar Rundown, Encerrar Rundown) e Eventos de imagem (Carregar, Descarregar, Iniciar Rundown, Encerrar Rundown) estão presentes na tabela gerada usando o seguinte comando:

    xperf -i kernel.etl -a tracestats -detail
    

    Nota Todos esses eventos podem não estar listados na tabela, dependendo se esses eventos ocorreram.

Limitação na decodificação de símbolos Xperf

O Xperf usará como padrão a unidade do sistema se uma unidade não for especificada para uma imagem executável (como \Path\Library.dll). Quando você executa o comando, se o -d/-merge Xperf não puder encontrar uma imagem executável que existia em um processo em execução durante a gravação, o Xperf não poderá recuperar as informações de identidade de arquivo de imagem e símbolo correspondentes e adicionar as informações à gravação mesclada. Sem essas informações, o Xperf não pode executar a decodificação de símbolo para essa imagem nessa gravação.

Esse problema não afeta outros caminhos de arquivo, como os caminhos em E/S de disco ou E/S de arquivo.

Para habilitar a decodificação de símbolos e ajudar a habilitar a carga de imagem correta e descarregar caminhos em gravações etw Xperf, você deve armazenar todas as imagens executáveis para as quais você pode exigir decodificação de símbolo ou carregamento de imagem e descarregar caminhos na unidade do sistema. Em seguida, execute as imagens dessa unidade. Se isso não for possível, crie um espelho das imagens na unidade do sistema, mesmo se você executar as imagens de outra unidade. Por exemplo, se C: for a unidade do sistema, crie uma cópia idêntica de D:\game\bin\binkw32.dll em C:\game\bin\binkw32.dll.

Windows Performance Toolkit

Símbolos

Usando o suporte do NGEN PDB clr 4.0

Problemas comuns de análise de In-Depth