Focar o gráfico de rastreio em pilhas sobrepostas

Quando usa o filtro Foco, seleciona uma única função e o gráfico de chamas apresenta os caminhos de código que entram e saem dessa função específica. Um gráfico focado permite-lhe realizar duas tarefas comuns:

  1. Analisar o consumo de recursos agregado de uma determinada função que é chamada a partir de vários locais.
  2. Analisar a proporção de tempo gasto numa função para diferentes autores da chamada da função.

Por exemplo, como analisa o consumo de recursos em torno da função Sort usando o gráfico de chamas padrão?

Função de ordenação no gráfico de rastreio em pilhas sobrepostas.

Na secção seguinte, focamos o gráfico em Sort e respondemos a esta pergunta. Os gráficos de chamas nesta página foram criados com o Modo de cor e a opção Comparar com definidos para os valores predefinidos de Nome e Nenhum, respetivamente.

Explicação do gráfico focado

O gráfico criado pelo filtro Foco cria efetivamente dois gráficos de chamas para a função especificada e junta-os:

Gráfico de rastreio em pilhas sobrepostas focado na função de ordenação.

No gráfico anterior, o frame correspondente à função Sort tem largura total e está realçado. O texto da frame inclui o nome da função, uma percentagem e o número de perfis usados para a análise. Neste caso, as métricas indicam que a função Sort, no total, consumiu 8,85% do tempo da CPU.

A metade inferior do gráfico anterior trata a função Sort como o ponto de partida de um gráfico de chamas padrão e mostra todos os respetivos destinatários. Pode criar esta parte com o gráfico de chamas padrão através do filtro Mostrar a partir do frame:

Parte inferior dos gráficos de chamas que mostram os destinatários da ordenação.

A metade superior do gráfico mostra as pessoas que ligaram para Sort com as pessoas que receberam a chamada ocultas. Pode fazer uma aproximação da metade superior através de uma série de filtros. Comece por adicionar um filtro Mostrar conjuntos para Sort. Em seguida, para cada função chamada por Sort, adicione Hide stacks ou Hide frames. Nesta situação, adicionaria uma ocultação de frames para quickSort para eliminar esta função e os respetivos elementos secundários e, em seguida, adicionaria ocultação de frames para Len e maxDepth:

Parte superior dos gráficos de chamas que mostram os autores das chamadas de ordenação.

Com estes filtros, a aproximação da metade superior do gráfico focado mostra que a função Sort é alcançada através de diferentes pilhas de chamadas. No entanto, as métricas não são agregadas, pelo que o gráfico não ilustra o consumo geral de métricas por Sort.

O gráfico focado é ligeiramente diferente de um gráfico que apenas combina as duas aproximações:

  • Existe um único frame para a função de foco Sort.
  • O frame da função de foco está realçado, é um frame de largura total e apresenta métricas que são a agregação de todas as pilhas de chamadas.
  • Existem várias sequências de chamadas, cada uma a começar com um frame root, para que possa ver a sequência de chamadas completa.

Selecionar uma moldura

Se selecionar um frame num gráfico focado, o gráfico de chamas é redesenhado com a pilha de chamadas desse frame apresentada com mais detalhes. Se o frame for alcançado através de várias pilhas de chamadas, cada uma dessas pilhas de chamadas é apresentada. As pilhas de chamadas que não incluem a frame estão ocultas. Para restaurar o gráfico ao estado original, selecione a moldura que corresponde à função de foco.

No exemplo anterior, Sort é chamado por (*byFreq).sort e por (*byLiteral).sort. Para ver a pilha de chamadas de (*byLiteral).sort com mais detalhes, selecione essa frame. Pode selecionar outro frame e refinar ainda mais as pilhas de chamadas apresentadas:

Gráfico de rastreio em pilhas sobrepostas expandido sobre a ordenação.

Para restaurar um gráfico de chamas focado ao respetivo estado original, selecione a frame que apresenta o valor do filtro Foco. Neste caso, selecione a moldura cinzenta com a etiqueta Sort. Tenha em atenção que, para restaurar um gráfico de chamas padrão ao respetivo estado original, selecione a frame raiz.

Analisar o gráfico

Para analisar um gráfico de chamas focado, usa os mesmos controlos e filtros que usa para analisar um gráfico de chamas padrão. No entanto, existem diferenças na forma como os gráficos interagem com o ponteiro:

  • Se passar o cursor do rato sobre um frame, a sugestão apresenta dados de métricas. Para um gráfico de chamas padrão, são apresentados os dados totais das métricas para o frame. Para um gráfico de chamas focado, são apresentados os dados das métricas agregadas da função.

  • Se selecionar um frame, o gráfico de chamas é redesenhado com esse frame apresentado a toda a largura. Para restaurar um gráfico de chamas padrão à sua forma original, tem de selecionar a frame superior. Para restaurar um gráfico de chamas focado à sua forma original, tem de selecionar a frame que apresenta o valor do filtro de foco.

Para ver informações sobre o gráfico focado quando está a comparar perfis, consulte o artigo Focar uma comparação.

Definir o filtro de foco

Existem diferentes métodos que pode usar para definir um filtro de foco, mas resultam no mesmo gráfico.

Usando o gráfico

Coloque o ponteiro no frame de interesse e, de seguida, clique em Focar na dica do frame. A função de foco é extraída da moldura. Neste exemplo, o gráfico de chamas, que está expandido em torno da função (*huffmanBitWriter).write, apresenta três diferentes pilhas de chamadas:

Gráfico de chamas focado num pequeno frame.

Usando a lista de foco

Para focar o gráfico de chamas numa função específica, faça o seguinte:

  1. Clique em Lista para abrir a tabela Selecionar função de foco.
  2. Selecione um nome de função na tabela ou, para uma função específica, clique em Ações e, de seguida, selecione Foco:

Selecionar tabela de funções de foco.

Se a função que selecionou puder ser chamada através de diferentes pilhas de chamadas, cada pilha de chamadas é apresentada no gráfico de chamas.

Pode ordenar as linhas da tabela por ordem ascendente ou descendente selecionando um elemento de cabeçalho da tabela. Cada linha da tabela apresenta um nome de função e estatísticas relacionadas com a execução da função. Esta tabela mostra que a função (*compressor).deflate requer 2,78 s para ser executada, com 1,8 s gastos na própria função e o restante tempo gasto na respetiva pilha de chamadas. Uma coluna de percentagem indica que 57% do tempo de execução total é gasto na função (*compressor).deflate. Outra coluna indica que, 89% das vezes, (*compressor).deflate ou uma função na respetiva pilha de chamadas está a ser executada. Por último, a coluna de contagem indica que existem três sequências que invocam a função (*compressor).deflate.

Quando compara perfis, o conteúdo da lista de foco é diferente. Para mais informações, consulte o artigo Focar uma comparação.

Usando a barra de filtros

Clique no texto cinzento Adicionar filtro de dados do perfil na barra de filtros e, de seguida, introduza Focus: e uma string que identifique a função na qual se concentrar. Pode usar uma substring, incluindo prefixos de pacotes, ou o nome completo. Quando fornece uma string ambígua, é selecionada a função que melhor corresponde à string.

Se preferir, pode clicar em Filtros, selecionar Foco e, de seguida, introduzir a string de identificação.

Se a função que selecionou puder ser chamada através de diferentes pilhas de chamadas, cada pilha de chamadas é apresentada no gráfico de chamas.

Remover o filtro de foco

Para remover o filtro de foco, clique em Fechar no filtro.

O que se segue?