Capítulo 3. Conceitos Básicos

Este capítulo explana alguns conceitos do KCachegrind e introduz termos usados na interface.

O Modelo de Dados para Dados de Auditoria

Entidades de Custo

Contagem de custos de eventos (como Perdas na L2) são atribuídas a entidades de custo, que são itens com relacionamentos com o código-fonte ou estrutura de dados de um programa fornecido. Entidades de custo não somente podem ser código simples ou posições de dados, mas também posições de referência. Por exemplo, uma chamada tem uma fonte e um alvo, ou um endereço de dados pode ter um tipo de dado e uma posição do código onde sua alocação ocorreu.

As entidades de custo conhecidas pelo KCachegrind estão indicadas a seguir. Posições Simples:

Instrução

Uma instrução de Assembly num endereço indicado.

Linha de Código de uma Função

Todas as instruções que o compilador (através da informação de depuração) mapeia numa determinada linha de código, identificada pelo nome do arquivo de código e pelo número de linha, e que são executadas sob o contexto de uma determinada função. A última é necessária, porque uma linha de código de uma função incorporada ('inline') poderá aparecer no contexto de várias funções. As instruções sem qualquer mapeamento numa linha de código são representadas pela linha 0 do arquivo ???.

Função

Todas as linhas de código de uma determinada função compõem a função em si. Uma função é identificada pelo seu nome e pela sua localização no arquivo-objeto binário, se estiver disponível. A última é necessária porque os objetos binários de um único programa poderão conter funções com o mesmo nome (elas poderão ser acessadas, por exemplo, com o dlopen' ou dlsym; o editor de ligações durante a execução resolve as funções numa determinada ordem de objetos binários). Se uma ferramenta de análise não conseguir detectar o nome do símbolo de uma função, por exemplo porque a informação de depuração não está disponível, tanto é usado o endereço da primeira instrução executada, ou então o ???.

Objeto Binário

Todas as funções cujo código esteja dentro do intervalo de um determinado objeto binário, seja ele o executável principal ou uma biblioteca dinâmica.

Arquivo de Código

Todas as funções cuja primeira instrução esteja mapeada numa linha do arquivo de código indicado.

Classe

Os nomes dos símbolos das funções estão tipicamente ordenados de forma hierárquica em espaços de nomes, por exemplo os 'namespaces' de C++, ou as classes das linguagens orientadas por objetos. Como tal, uma classe poderá conter funções da classe ou outras classes embebidas nela.

Parte de Análise

Alguma seção no tempo de uma execução da análise, com um dado ID de tarefa, ID de processo e uma linha de comando executada.

Como pode ser visto na lista, um conjunto de entidades de custo define normalmente outra entidade de custo, existindo uma hierarquia de inclusão das entidade de custo.

Tuplos de posições:

  • Uma chamada de uma instrução para uma função-alvo.

  • Uma chamada de uma linha de código para uma função-alvo.

  • Uma chamada de uma função de origem para uma função de destino.

  • Um salto (in)condicional de uma instrução de origem para uma de destino.

  • Um salto (in)condicional de uma linha de origem para uma de destino.

Os saltos entre funções não são permitidos, uma vez que isto não faz sentido num gráfico de chamadas. Assim, as sequências como o tratamento de exceções e os 'long jumps' do C terão que ser traduzidos em saltos na pilha de chamadas, de acordo com as necessidades.

Tipos de Eventos

Tipos de eventos arbitrários podem ser especificados nos dados de auditoria fornecendo-lhes um nome. Seu custo relacionado a uma entidade de custo é um inteiro de 64 bits.

Tipos de eventos os quais os custos são especificados em um arquivo de dados de auditoria são chamados eventos reais. Além disso, tipos podem especificar fórmulas para tipos de eventos calculados a partir de eventos reais, sendo chamados de eventos herdados.