Marcas de pilha
No WPA (Windows® Performance Analyzer), as marcas de pilha são um recurso que permite criar rótulos (marcas) para ajudá-lo a identificar melhor quais partes das pilhas de chamadas são afetadas.
Noções básicas sobre as diferenças entre marcas de pilha e marcas de quadro de pilha
Você pode pensar em marcas de pilha (marcas de quadro) e de pilha como duas exibições dos mesmos dados disponíveis na coluna Pilha . Você pode configurar uma coluna de pilha para ser exibida como uma marca de pilha ou coluna de pilha (marca de quadro) no Editor de Exibição.
Uma pilha de chamadas consiste em uma lista de quadros. Se uma pilha de chamadas estiver na forma de A -> B -> C, haverá três quadros: A, B e C. Colunas de pilha (marcas de quadro) mapeiam cada quadro de pilha de chamadas para uma marca ou o padrão do módulo!se nenhuma marca estiver presente.
Por exemplo, a pilha de chamadas A -> B -> C-> D, no modo de exibição Pilha (Marcas de Quadro) pode se tornar A -> FrameTagB -> FrameTagC -> D. Cada uma das marcas de quadro pode ter uma hierarquia com base na hierarquia de definição das marcas no arquivo *.stacktags (por exemplo, o valor real de FrameTagB pode ser "HTML\Script\OM").
Uma marca de pilha resume uma pilha de chamadas inteira usando um único nome de marca. Por exemplo, a marca de quadro mais mapeada inferior normalmente é feita a marca de pilha, a menos que haja prioridade especificada para marcas. Usando o mesmo exemplo A -> B -> C -> D, em que o modo de exibição de marca de quadro é A -> FrameTagB -> FrameTagC -> D, o modo de exibição de marca de pilha é apenas: FrameTagC.
Além da Marca normal para exatamente o módulo e o método correspondentes, você também pode definir HintTag com HintOperator como Chamador ou Chamador. Por exemplo, um HintTag com HintOperator como Callee é definido para B. A exibição da pilha de chamadas A -> B -> C -> D na Pilha (FrameTags) pode se tornar A -> FrameTagB -> ModuleOfC -> D e seu modo de exibição StackTag é FrameTagB -> ModuleOfC. O módulo de C é criado dinamicamente como uma nova marca de pilha. Definir explicitamente o atributo OnlyShowModule de HintTag como false tornaria C como uma nova marca de pilha em vez de ModuleOfC. O atributo OnlyShowModule é verdadeiro por padrão. O caso de uso típico é atribuir automaticamente funções de servidor RPC. A função de chamador direto é rpcrt4.dll! Invoke_epilog1_start. Você pode definir um HintTag para essa função de chamador comum para conseguir isso.
Identificar o custo de uma função comum definindo uma marca de dica
Normalmente, a coluna Marca de Pilha identifica o custo de uma única função em um único módulo. No entanto, o WPA poderá consolidar o custo de todas as funções chamadas por essa função se você definir uma marca de dica e um operador de dica. A marca de dica é um rótulo para a função comum e o grupo de funções que ele chama, e o operador de dica identifica a função comum como a função de chamada, o chamador ou a função chamada, o receptor.
O caso de uso típico é definir uma marca de dica para que o WPA atribua automaticamente funções de servidor RPC. Talvez você também queira definir uma marca de dica, por exemplo, para mostrar os portadores de bloqueio ou as funções que estão alocando heaps.
Definindo marcas de dica
Marcas de dica e operadores de dica são definidos em XML na sintaxe a seguir com os atributos e valores descritos na tabela a seguir.
<HintTag
Name="string-label"
Priority="integer"
HintOperator="caller-or-callee"
OnlyShowModule="Boolean">
<Entrypoint
Module="module-name"
Method="method-name">
</HintTag>
Elemento | Atributo | Descrição |
---|---|---|
HintTag | Nome | Cadeia de caracteres a ser usada como o rótulo |
Prioridade | Inteiro. O padrão é zero. | |
HintOperator | O valor é "Chamador" ou "Receptor" para a função chamada ou chamada, respectivamente. | |
OnlyShowModule | Booliano, opcional. O valor padrão é true. | |
Entrypoint | Módulo | Nome do módulo que contém Método. |
Método | Nome do método que é o ponto de entrada. |
Para adicionar as marcas de dica que você definiu em um arquivo XML, use o procedimento em Adicionar marcas de pilha ao Arquivo de Definição de Marcas de Pilha, mais adiante neste tópico.
Exemplo de uso de uma marca de dica
Considere os dados de exemplo mostrados na figura a seguir.
Neste exemplo, há 4 funções RPC chamadas em WbemCore.dll:
- CWbemLevel1Login::NTLMLogin
- CWbemNamespace::GetObjectW
- CWbemNamespace::P utInstance
- CWbemNamespace::ExecMethod
Ser capaz de consolidar o custo de chamar essas funções é útil para determinar o custo das funções do lado do servidor RPC, pois o WPA exibe a despesa total como RPC na coluna Marca de Pilha .
Com a rpcrt4.dll! Invocar função definida como o ponto de entrada para a marca de dica RPC e o operador de dica especificado como o receptor, WPA representa rpcrt4.dll! Invoque com RPC e wbemcore.dll! CWbemLevel1Login::NTLMLogin com RPC\wbemcore.dll\CWbemLevel1Login::NTLMLogin. Portanto, na coluna Marca de Pilha , o WPA exibe o custo de wbemcore.dll! CWbemLevel1Login::NTLMLogin, a função do lado do servidor RPC, como 31,855774ms. Em WbemCore.dll, NTLMLogin é a função RPC superior na hierarquia de funções chamadas.
A marca de dica RPC é definida pelo XML a seguir.
<HintTag Name="RPC" HintOperator="Callee">
<Entrypoint Module="rpcrt4.dll" Method="Invoke"/>
</HintTag>
Adicionando marcas de pilha ao arquivo de definição de marcas de pilha
Para adicionar uma definição de marca de pilha ao arquivo de Definição de Marcas de Pilha, faça o seguinte:
No menu, escolha Rastreamento e, em seguida, selecione Propriedades de Rastreamento. A guia Propriedades do Rastreamento é aberta.
Na área Definição de Marcas de Pilha, clique em Adicionar ao local desejado.
Navegue até a área que contém o arquivo de marcas de pilha, selecione-o e clique em Abrir.
Removendo uma marca de pilha do arquivo de definição de marcas de pilha
Para remover uma definição de marca de pilha do arquivo de definição de marcas de pilha, faça o seguinte:
No menu, escolha Rastreamento e, em seguida, selecione Propriedades de Rastreamento. A guia Propriedades do Rastreamento é aberta.
Na área Definição de Marcas de Pilha, selecione as definições de marca de pilha que você deseja remover e clique em Remover.
Aviso Certifique-se de remover as definições de marca de pilha selecionadas, pois você não terá a opção de cancelar depois de clicar em Remover.
Recarregando o arquivo de definição de marcas de pilha
Para recarregar uma definição de marca de pilha para o arquivo de Definição de Marcas de Pilha, faça o seguinte:
No menu, escolha Rastreamento e, em seguida, selecione Propriedades de Rastreamento. A guia Propriedades do Rastreamento é aberta.
Na área Definição de Marcas de Pilha, clique em Recarregar. Você pode carregar várias marcas de pilha pressionando e mantendo pressionada a tecla Shift e clicando com o botão esquerdo em cada definição de marcas de pilha.
Solução de problemas do arquivo de marcas de pilha
Para investigar problemas no arquivo de marcas de pilha no WPA, faça o seguinte:
No menu, clique em Janela e selecione Console de Diagnóstico. A exibição do WPA é dividida em duas , com o Explorer e Análise do Graph na metade superior da tela e o Console de Diagnóstico na metade inferior da tela.
Ponta Você também pode acessar o Console de Diagnóstico no canto inferior esquerdo do WPA clicando em Console de Diagnóstico. Uma vez aberto, você também pode arrastá-lo para uma janela separada ou encaixá-lo na parte superior ou lateral.
O Console de Diagnóstico lista informações sobre exceções que ocorrem durante o fluxo de trabalho de análise. Você pode diagnosticar problemas de decodificação de símbolos neste console