~ubuntu-branches/ubuntu/wily/kde-l10n-ptbr/wily

« back to all changes in this revision

Viewing changes to 4/pt_BR/docs/kdesdk/kcachegrind/index.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2015-01-21 12:33:46 UTC
  • mfrom: (1.12.49)
  • Revision ID: package-import@ubuntu.com-20150121123346-cz24qse1vtmuvdhu
Tags: 4:14.12.2-0ubuntu1
* New upstream release, first version from KDE Applications
* Revert install to /usr/share/locale/
* Add debian/overlapping files to remove files that are in plasma5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" ?>
 
2
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
 
3
  <!ENTITY kcachegrind '<application
 
4
>KCachegrind</application
 
5
>'>
 
6
  <!ENTITY cachegrind "<application
 
7
>Cachegrind</application
 
8
>">
 
9
  <!ENTITY calltree "<application
 
10
>Calltree</application
 
11
>">
 
12
  <!ENTITY callgrind "<application
 
13
>Callgrind</application
 
14
>">
 
15
  <!ENTITY valgrind "<application
 
16
>Valgrind</application
 
17
>">
 
18
  <!ENTITY oprofile "<application
 
19
>OProfile</application
 
20
>">
 
21
  <!ENTITY EBS "<acronym
 
22
>EBS</acronym
 
23
>">
 
24
  <!ENTITY TBS "<acronym
 
25
>TBS</acronym
 
26
>">
 
27
  <!ENTITY kappname "&kcachegrind;">
 
28
  <!ENTITY package "kdesdk">
 
29
  <!ENTITY % addindex "IGNORE">
 
30
  <!ENTITY % Brazilian-Portuguese "INCLUDE">
 
31
]>
 
32
 
 
33
<book id="kcachegrind" lang="&language;">
 
34
 
 
35
<bookinfo>
 
36
<title
 
37
>Manual do &kcachegrind;</title>
 
38
 
 
39
<authorgroup>
 
40
<author
 
41
><firstname
 
42
>Josef</firstname
 
43
> <surname
 
44
>Weidendorfer</surname
 
45
> <affiliation
 
46
> <address
 
47
><email
 
48
>Josef.Weidendorfer@gmx.de</email
 
49
></address>
 
50
</affiliation>
 
51
<contrib
 
52
>Autor original da documentação</contrib>
 
53
</author>
 
54
 
 
55
<author
 
56
><firstname
 
57
>Federico</firstname
 
58
> <surname
 
59
>Zenith</surname
 
60
> <affiliation
 
61
> <address
 
62
><email
 
63
>federico.zenith@member.fsf.org</email
 
64
></address>
 
65
</affiliation>
 
66
<contrib
 
67
>Atualizações e correções</contrib>
 
68
</author>
 
69
 
 
70
<othercredit role="translator"
 
71
><firstname
 
72
>Marcus</firstname
 
73
><surname
 
74
>Gama</surname
 
75
><affiliation
 
76
><address
 
77
><email
 
78
>marcus.gama@gmail.com</email
 
79
></address
 
80
></affiliation
 
81
><contrib
 
82
>Tradução</contrib
 
83
></othercredit
 
84
 
85
 
 
86
</authorgroup>
 
87
 
 
88
<copyright>
 
89
<year
 
90
>2002-2004</year>
 
91
<holder
 
92
>&Josef.Weidendorfer;</holder
 
93
>       
 
94
</copyright>
 
95
<copyright>
 
96
<year
 
97
>2009</year>
 
98
<holder
 
99
>Federico Zenith</holder>
 
100
</copyright>
 
101
<legalnotice
 
102
>&FDLNotice;</legalnotice>
 
103
 
 
104
<date
 
105
>07/10/2009</date>
 
106
<releaseinfo
 
107
>0.5.1</releaseinfo>
 
108
 
 
109
<abstract>
 
110
<para
 
111
>O &kcachegrind; é uma ferramenta de visualização de dados de auditoria, escrito usando o ambiente &kde;. </para>
 
112
</abstract>
 
113
 
 
114
<keywordset>
 
115
<keyword
 
116
>KDE</keyword>
 
117
<keyword
 
118
>kdesdk</keyword>
 
119
<keyword
 
120
>Cachegrind</keyword>
 
121
<keyword
 
122
>Callgrind</keyword>
 
123
<keyword
 
124
>Valgrind</keyword>
 
125
<keyword
 
126
>Auditoria</keyword>
 
127
</keywordset>
 
128
 
 
129
</bookinfo>
 
130
 
 
131
 
 
132
<chapter id="introduction">
 
133
<title
 
134
>Introdução</title>
 
135
 
 
136
<para
 
137
>O &kappname; é um navegador para dados produzidos por ferramentas de auditoria. Este capítulo esclarece para que serve um auditoria, como ela é feita, e fornece alguns exemplos de ferramentas de auditoria disponíveis. </para>
 
138
 
 
139
<sect1 id="introduction-profiling">
 
140
<title
 
141
>Auditoria</title>
 
142
 
 
143
<para
 
144
>Quando você desenvolve um programa, um dos últimos passos muitas vezes envolve otimizações de desempenho. Como não faz sentido otimizar funções raramente usada, uma vez que elas não consumirão muito tempo de execução, você precisa saber em qual parte do seu programa a maior parte do tempo é consumido. </para>
 
145
 
 
146
<para
 
147
>Para o código sequencial, a coleta de dados estatísticos das características de execução dos programas, como os valores dos tempos dispendidos nas funções e linhas de código é normalmente o suficiente. Isto é chamado normalmente de Análise ou 'Profiling'. O programa é executado sob o controle de uma ferramenta de análise que fornece o resumo de uma execução no final. Em contraste, para o código paralelo, os problemas de performance são normalmente causados quando um processador fica à espera dos dados do outro. Uma vez que este tempo de espera normalmente é atribuído de forma simples, aqui será melhor gerar traços dos eventos com tempos marcados. O &kcachegrind; não consegue visualizar este tipo de dado. </para>
 
148
 
 
149
<para
 
150
>Após analisar os dados da auditoria produzida, deve ser fácil ver os trechos mais importantes e pontos de estrangulamento do código. Por exemplo, suposições sobre a contagem de chamadas podem ser verificadas, e identificadas regiões do código que pode ser otimizadas. Além disso, sucesso da otimização pode ser verificado novamente com a execução de outra auditoria. </para>
 
151
</sect1>
 
152
 
 
153
<sect1 id="introduction-methods">
 
154
<title
 
155
>Métodos de Auditoria</title>
 
156
 
 
157
<para
 
158
>Uma medida exata do tempo que passou ou dos eventos que ocorrem durante a execução de uma determinada região de código (&eg; uma função) necessita da inserção de algum código de medida adicional, antes e depois da região indicada. Este código lê o tempo ou uma contagem de eventos global, calculando as diferenças. Assim, o código original terá que ser alterado antes da execução. Isto é chamado de instrumentação. Ela poderá ser criada pelo próprio programador, pelo compilador ou pelo sistema de execução. Uma vez que as regiões interessantes estão normalmente encadeadas, a sobrecarga da instrumentação influencia sempre a medida em si. Assim, a instrumentação deverá ser feita de forma seletiva e os resultados terão que ser interpretados com cuidado. Obviamente, isto torna a análise de performance por medida exata um processo bastante complexo.</para>
 
159
 
 
160
<para
 
161
>A medição exata é possível em função os contadores de hardware (incluindo contadores incrementados em um tique de tempo) fornecidos nos processadores modernos, que são incrementados sempre que um evento acontece. Como nós desejamos atribuir eventos para regiões de código, sem os contadores, nós teríamos que manipular cada evento incrementando um contador para a região de código atual por nós mesmos. Fazer isto no software é claramente impossível; mas na suposição que a distribuição do evento pelo código-fonte é semelhante quando procuramos somente a cada enésimo evento ao invés de evento por evento, nós construímos um método de medição que é ajustável em função do todo. Isto é chamado Amostragem. A Amostragem Baseada em Tempo (do inglês &TBS;) é feita usando um temporizador que regularmente verifica o contador do programa para criar um histograma ao longo do código do programa. Amostragem Baseada em Evento (do inglês &EBS;) é feita aproveitando os contadores de hardware dos modernos processadores, e é feita usando um modo onde um manipulador de interrupção é chamado em um contador abaixo do fluxo, gerando um histograma da distribuição do evento correspondente. No manipulador, o contador do evento está sempre reinicializado para o <symbol
 
162
>n</symbol
 
163
> do método de amostragem. A vantagem da amostragem é que o código não precisa ser mudado, mas ela ainda deve atentar para uma restrição: a suposição acima será mais correta se <symbol
 
164
>n</symbol
 
165
> for pequeno, mas quanto menor o <symbol
 
166
>n</symbol
 
167
>, maior o todo do manipulador de interrupção.</para>
 
168
 
 
169
<para
 
170
>Outro método de medida é a simulação das coisas que ocorrem no sistema do computador enquanto executa um determinado código, &ie; uma simulação orientada pela execução. Obviamente, a simulação deriva sempre de um modelo de 'hardware' mais ou menos preciso. Para os modelos muito detalhados que se aproximam da realidade, o tempo de simulação poderá ser alto, de forma inaceitável para ser posto em prática. A vantagem é que o código de simulação/medida arbitrariamente complexo poderá ser introduzido num determinado código sem perturbar os resultados. Fazer isto diretamente antes da execução (chamado de instrumentação durante a execução), usando o binário original, é bastante confortável para o usuário. O método torna-se inútil quando se simula apenas partes de uma máquina com um modelo simples. Além disso, os resultados produzidos pelos modelos simples são normalmente muito mais fáceis de compreender: o problema frequente com o 'hardware' real é que os resultados incluem efeitos sobrepostos de diferentes partes do sistema.</para>
 
171
</sect1>
 
172
 
 
173
<sect1 id="introduction-tools">
 
174
<title
 
175
>Ferramentas de Auditoria</title>
 
176
 
 
177
<para
 
178
>A ferramenta de análise mais conhecida é o <application
 
179
>gprof</application
 
180
> do GCC: você precisa compilar o seu programa com a opção <option
 
181
>-pg</option
 
182
>; rodar o programa, irá gerar um arquivo <filename
 
183
>gmon.out</filename
 
184
>, que poderá ser transformado num formato legível com o <command
 
185
>gprof</command
 
186
>. A desvantagem é o passo de compilação necessário para preparar o executável, que terá que ser compilado estaticamente. O método aqui usado é a instrumentação gerada pelo compilador, que consiste na medida dos arcos de chamadas entre funções, bem como contadores para as respectivas chamadas, juntamente com o &TBS;, que lhe fornece um histograma com a distribuição do tempo pelo código. Usando ambos os dados, é possível calcular de forma heurística o tempo inclusivo das funções, &ie; o tempo dispendido numa função, juntamente com todas as funções chamadas a partir dela. </para>
 
187
 
 
188
<para
 
189
>Para uma medida exata dos eventos que ocorrem, existem algumas bibliotecas com funções capazes de ler os contadores de performance do 'hardware'. As mais conhecidas são a atualização PerfCtr para o &Linux;, e as bibliotecas independentes da arquitetura PAPI e PCL. De qualquer forma, uma medida exata necessita de instrumentação no código, como dito anteriormente. Qualquer uma delas usa as próprias bibliotecas ou usa os sistemas de instrumentação automáticos como o ADAPTOR (para a instrumentação do código em FORTRAN) ou o DynaProf (injeção de código com o DynInst).</para>
 
190
 
 
191
<para
 
192
>O &oprofile; é uma ferramenta de análise a nível do sistema para &Linux; que usa a amostragem. </para>
 
193
 
 
194
<para
 
195
>Em vários aspectos, uma forma confortável de fazer uma Análise é com o &cachegrind; ou o &callgrind;, que são simuladores que usam a plataforma de instrumentação &valgrind; durante a execução. Uma vez que não existe necessidade de acessar os contadores do 'hardware' (o que é normalmente difícil com as instalações de &Linux; de hoje em dia) e os binários a serem analisados podem ser deixados sem modificações, é uma boa forma alternativa para as outras ferramentas de análise. A desvantagem da lentidão da simulação poderá ser reduzida fazendo a simulação apenas nas partes interessantes do programa e, talvez, só apenas em algumas iterações de um ciclo. Sem a instrumentação de medida/simulação, a utilização do &valgrind; só terá um atraso num fator de 3 à 5. Além disso, quando apenas o gráfico de chamadas e as contagens de chamadas forem de interesse, o simulador da 'cache' poderá ser desligado. </para>
 
196
 
 
197
<para
 
198
>A simulação da 'cache' é o primeiro passo na aproximação dos tempos reais; como nos sistemas modernos, a execução é bastante sensível à exploração das <emphasis
 
199
>caches</emphasis
 
200
> que são pequenos e rápidos buffers de dados que aceleram os acessos repetidos às mesmas células da memória principal. O &cachegrind; faz a simulação da 'cache', interceptando os acessos a memória. Os dados produzidos incluem o número de acessos à memória para dados e instruções, as falhas da 'cache' de 1º/2º nível e relaciona esses dados com as linhas de código e as funções do programa. Combinando estes valores e usando as latências de falhas típicas, é possível indicar uma estimativa do tempo dispendido. </para>
 
201
 
 
202
<para
 
203
>O &callgrind; é uma extensão do &cachegrind; que constrói o gráfico de chamadas de um programa durante a execução, &ie; como as funções se chamam umas às outras e quantos eventos acontecem enquanto uma função é executada. Além disso, os dados da análise a serem recolhidos podem ser separados por tarefas ('threads') e por contextos de chamadas. Ele pode fornecer dados de análise a nível da instrução para permitir a anotação do código descodificado. </para>
 
204
</sect1>
 
205
 
 
206
<sect1 id="introduction-visualization">
 
207
<title
 
208
>Visualização</title>
 
209
 
 
210
<para
 
211
>As ferramentas de análise produzem tipicamente uma grande quantidade de dados. O desejo de navegar facilmente para baixo e para cima no gráfico de chamadas, em conjunto com uma alteração rápida do modo de ordenação das funções e a apresentação dos diferentes tipos de eventos, serve de motivo para criar um aplicativo &GUI; que desempenhe esta tarefa. </para>
 
212
 
 
213
<para
 
214
>O &kappname; é uma ferramenta de visualização para os dados de análise que preenche estes requisitos. Apesar de ser programada em primeiro lugar a partir da navegação dos dados do &cachegrind; com a &calltree; em mente, existem conversores disponíveis para apresentar os dados de análise produzidos pelas outras ferramentas. No apêndice, é dada uma descrição do formato do arquivo do &cachegrind;/&callgrind;. </para>
 
215
 
 
216
<para
 
217
>Além de uma lista de funções ordenadas de acordo com medidas de custo exclusivas ou inclusivas, e opcionalmente agrupadas por arquivo fonte, biblioteca compartilhada ou classe C++, os recursos do &kappname; incluem diversas formas de visualização para uma função selecionada, quais sejam: <itemizedlist>
 
218
<listitem
 
219
><para
 
220
>uma visão de gráfico de chamadas, que mostra uma seção do gráfico de chamadas ao redor da função selecionada,</para>
 
221
</listitem>
 
222
<listitem
 
223
><para
 
224
>uma visão de mapa em árvore, que permite visualizar chamadas aninhadas relacionadas juntas com métrica de custo inclusiva para rápida detecção visual de funções problemáticas,</para>
 
225
</listitem>
 
226
<listitem
 
227
><para
 
228
>código-fonte e visões anotadas desassembladas, permitindo ver detalhes do custo relacionado às linhas de código e instruções assembler.</para>
 
229
</listitem>
 
230
</itemizedlist>
 
231
 
 
232
</para>
 
233
</sect1>
 
234
</chapter>
 
235
 
 
236
<chapter id="using-kcachegrind">
 
237
<title
 
238
>Usando o &kcachegrind;</title>
 
239
 
 
240
<sect1 id="using-profile">
 
241
<title
 
242
>Gerando Dados para Visualizar</title>
 
243
 
 
244
<para
 
245
>Primeiro, devemos gerar dados de desempenho medindo os aspectos das características em tempo de execução de um aplicativo, usando uma ferramenta de auditoria. O &kcachegrind; propriamente dito não inclui nenhuma ferramenta de auditoria, mas pode ser melhor aproveitado em conjunto com o &callgrind;, e usando um conversor, pode também ser usado para visualizar dados produzidos com o &oprofile;. Apesar do escopo deste manual não ser o de documentar como auditar com estas ferramentas, a próxima seção fornece um pequeno tutorial para início rápido que você pode tomar como base. </para>
 
246
 
 
247
<sect2>
 
248
<title
 
249
>&callgrind;</title>
 
250
 
 
251
<para
 
252
>O &callgrind; é uma parte do <ulink url="http://valgrind.org"
 
253
>&valgrind;</ulink
 
254
>. Observe que ele era anteriormente chamado de &calltree;, mas o nome foi abandonado. </para>
 
255
 
 
256
<para
 
257
>O uso mais comum é anteceder a linha de comando para iniciar o seu aplicativo com o <userinput
 
258
><command
 
259
>valgrind</command
 
260
> <option
 
261
>--tool=callgrind</option
 
262
></userinput
 
263
>, como por exemplo <blockquote
 
264
><para
 
265
><userinput
 
266
><command
 
267
>valgrind</command
 
268
> <option
 
269
>--tool=callgrind</option
 
270
> <replaceable
 
271
>programa</replaceable
 
272
> <replaceable
 
273
>argumentos</replaceable
 
274
></userinput
 
275
></para
 
276
></blockquote
 
277
> Quando o programa terminar, será gerado um arquivo <filename
 
278
>callgrind.out.<replaceable
 
279
>pid</replaceable
 
280
></filename
 
281
> e que poderá ser carregado no &kcachegrind;. </para>
 
282
 
 
283
<para
 
284
>Um uso mais avançado é gerar dados de auditoria sempre que uma determinada função de seu aplicativo é chamada. Por exemplo, para o &konqueror;, para ver dados de auditoria somente para renderização de uma página web, você pode decidir gerar os dados sempre que você selecionar o item de menu <menuchoice
 
285
><guimenu
 
286
>Ver</guimenu
 
287
><guimenuitem
 
288
>Recarregar</guimenuitem
 
289
></menuchoice
 
290
>. Isto corresponde a uma chamada ao <methodname
 
291
>KonqMainWindow::slotReload</methodname
 
292
>. Use <blockquote
 
293
><para
 
294
> <userinput
 
295
><command
 
296
>valgrind</command
 
297
> <option
 
298
>--tool=callgrind</option
 
299
> <option
 
300
>--dump-before=KonqMainWindow::slotReload</option
 
301
> <replaceable
 
302
>konqueror</replaceable
 
303
> </userinput
 
304
></para
 
305
></blockquote
 
306
> Isto produzirá múltiplos arquivos de dados de auditoria com uma sequência numérica crescente no final dos nomes de arquivo. Um arquivo sem um número no final (terminando somente no PID do processo) também será produzido. Carregando este arquivo no &kcachegrind;, todos os outros serão também carregados, e podem ser vistos na <guilabel
 
307
>Visão Geral de Partes</guilabel
 
308
> e lista de <guilabel
 
309
>Partes</guilabel
 
310
>. </para>
 
311
 
 
312
</sect2>
 
313
 
 
314
<sect2>
 
315
<title
 
316
>&oprofile;</title>
 
317
 
 
318
<para
 
319
>O &oprofile; está disponível em <ulink url="http://oprofile.sf.net"
 
320
> sua página na internet</ulink
 
321
>. Siga as instruções de instalação na página Web mas, antes disso, verifique se a sua distribuição não o oferece já como um pacote (como a &SuSE;). </para>
 
322
 
 
323
<para
 
324
>A análise ao nível do sistema só é permitida para o usuário 'root', uma vez que todas as ações do sistema poderão ser observadas. Assim, as seguintes ações terão que ser feitas como 'root'. Primeiro, configure o processo de análise, usando a &GUI; <command
 
325
>oprof_start</command
 
326
> ou a ferramenta da linha de comando <command
 
327
>opcontrol</command
 
328
>. A configuração normal seria o modo de temporização (&TBS;, ver a introdução). Para iniciar a medida, execute o <userinput
 
329
><command
 
330
>opcontrol</command
 
331
> <option
 
332
>-s</option
 
333
></userinput
 
334
>. Depois execute o aplicativo em que está interessado e, a seguir, invoque um <userinput
 
335
><command
 
336
>opcontrol</command
 
337
> <option
 
338
>-d</option
 
339
></userinput
 
340
>. Isto irá apresentar os resultados das medidas nos arquivos sob a pasta <filename class="directory"
 
341
>/var/lib/oprofile/samples/</filename
 
342
>. Para ser capaz de visualizar os dados no &kcachegrind;, execute numa pasta vazia: <blockquote
 
343
><para
 
344
><userinput
 
345
><command
 
346
> opreport</command
 
347
> <option
 
348
>-gdf</option
 
349
> | <command
 
350
>op2callgrind</command
 
351
></userinput
 
352
> </para
 
353
></blockquote
 
354
> Isto irá produzir uma quantidade de arquivos, um por cada programa que estava rodando no sistema. Cada um deles poderá ser carregado no &kcachegrind; por si só. </para>
 
355
 
 
356
</sect2>
 
357
</sect1>
 
358
 
 
359
<sect1 id="using-basics">
 
360
<title
 
361
>Fundamentos da Interface com o Usuário</title>
 
362
 
 
363
<para
 
364
>Ao iniciar o &kcachegrind; com um arquivo de dados de auditoria como argumento, ou após carregar um através do <menuchoice
 
365
><guimenu
 
366
>Arquivo</guimenu
 
367
><guimenuitem
 
368
>Abrir</guimenuitem
 
369
> </menuchoice
 
370
>, você verá um painel de navegação contendo a lista de funções à esquerda, e na parte principal à direita, uma área com visualizações para a função selecionada. Esta área de visualização pode ser configurada arbitrariamente para mostrar múltiplas visualizações de uma vez. </para>
 
371
 
 
372
<para
 
373
>Na primeira vez, esta área estará dividida numa parte superior e outra inferior, tendo cada uma delas diferentes áreas que podem ser selecionadas em páginas separadas. Para mover essas áreas, use o menu de contexto das páginas e ajustando as divisórias entre elas. Para mudar rapidamente de disposições de visualização, use as opções <menuchoice
 
374
><shortcut
 
375
><keycombo action="simul"
 
376
>&Ctrl;<keycap
 
377
>→</keycap
 
378
> </keycombo
 
379
></shortcut
 
380
> <guimenu
 
381
>Ver</guimenu
 
382
><guisubmenu
 
383
>Disposição</guisubmenu
 
384
> <guimenuitem
 
385
>Ir para a Seguinte</guimenuitem
 
386
></menuchoice
 
387
> e <menuchoice
 
388
><shortcut
 
389
><keycombo action="simul"
 
390
>&Ctrl;<keycap
 
391
>←</keycap
 
392
> </keycombo
 
393
></shortcut
 
394
> <guimenu
 
395
>Ver</guimenu
 
396
><guisubmenu
 
397
>Disposição</guisubmenu
 
398
> <guimenuitem
 
399
>Ir para a Anterior</guimenuitem
 
400
></menuchoice
 
401
>. </para>
 
402
 
 
403
<para
 
404
>Uma coisa importante para a visualização é o tipo de evento ativo: para o &callgrind;, este é &eg; os 'Cache Misses' (Falhas na Cache) ou o Cycle Estimation (Estimativa da 'Cache') para o &oprofile;, este é o <quote
 
405
>Temporizador</quote
 
406
> no caso mais simples. Você poderá alterar o tipo de evento com uma lista na barra de ferramentas ou na janela do Tipo de Evento. Uma primeira visão geral das características de execução deverá ser apresentada quando você selecionar a função <function
 
407
>main</function
 
408
> na lista da esquerda, e ver a visualização do gráfico de chamadas. Aí, você poderá ver as chamadas em curso no seu programa. Lembre-se que o gráfico de chamadas só mostra as funções com uma grande quantidade de eventos. Se fizer duplo-clique numa função do gráfico, ela irá mudar para mostrar as funções chamadas pela selecionada. </para>
 
409
 
 
410
<para
 
411
>Para explorar mais a &GUI;, além deste manual, dê uma olhada na seção de documentação na <ulink url="http://kcachegrind.sf.net"
 
412
>página Web do projeto</ulink
 
413
>. Além disso, cada elemento gráfico do &kcachegrind; tem ajuda <quote
 
414
>O Que é Isto?</quote
 
415
>. </para>
 
416
</sect1>
 
417
 
 
418
</chapter>
 
419
 
 
420
 
 
421
<chapter id="kcachegrind-concepts">
 
422
<title
 
423
>Conceitos Básicos</title>
 
424
 
 
425
<para
 
426
>Este capítulo explana alguns conceitos do &kcachegrind; e introduz termos usados na interface. </para>
 
427
 
 
428
<sect1 id="concepts-model">
 
429
<title
 
430
>O Modelo de Dados para Dados de Auditoria</title>
 
431
 
 
432
<sect2>
 
433
<title
 
434
>Entidades de Custo</title>
 
435
 
 
436
<para
 
437
>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. </para>
 
438
 
 
439
<para
 
440
>As entidades de custo conhecidas pelo &kcachegrind; estão indicadas a seguir. Posições Simples: <variablelist
 
441
> <varlistentry
 
442
><term
 
443
> Instrução</term
 
444
> <listitem
 
445
><para
 
446
> Uma instrução de Assembly num endereço indicado.</para
 
447
></listitem
 
448
> </varlistentry
 
449
> <varlistentry
 
450
> <term
 
451
>Linha de Código de uma Função</term
 
452
> <listitem
 
453
> <para
 
454
>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 <filename
 
455
>???</filename
 
456
>. </para
 
457
></listitem
 
458
> </varlistentry
 
459
> <varlistentry
 
460
> <term
 
461
>Função</term
 
462
> <listitem
 
463
><para
 
464
>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, &eg;, com o <function
 
465
>dlopen'</function
 
466
> ou <function
 
467
>dlsym</function
 
468
>; 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, &eg; 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 <function
 
469
>???</function
 
470
>. </para
 
471
></listitem
 
472
> </varlistentry
 
473
> <varlistentry
 
474
> <term
 
475
>Objeto Binário</term
 
476
> <listitem
 
477
><para
 
478
>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.</para
 
479
></listitem
 
480
> </varlistentry
 
481
> <varlistentry
 
482
> <term
 
483
>Arquivo de Código</term
 
484
> <listitem
 
485
> <para
 
486
>Todas as funções cuja primeira instrução esteja mapeada numa linha do arquivo de código indicado.</para
 
487
></listitem
 
488
> </varlistentry
 
489
> <varlistentry
 
490
> <term
 
491
>Classe</term
 
492
> <listitem
 
493
> <para
 
494
>Os nomes dos símbolos das funções estão tipicamente ordenados de forma hierárquica em espaços de nomes, &eg; 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.</para
 
495
></listitem
 
496
> </varlistentry
 
497
> <varlistentry
 
498
> <term
 
499
>Parte de Análise</term
 
500
> <listitem
 
501
> <para
 
502
>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.</para
 
503
></listitem
 
504
> </varlistentry
 
505
> </variablelist
 
506
> 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. </para>
 
507
 
 
508
<para
 
509
>Tuplos de posições: <itemizedlist
 
510
> <listitem
 
511
><para
 
512
> Uma chamada de uma instrução para uma função-alvo.</para
 
513
></listitem
 
514
> <listitem
 
515
><para
 
516
> Uma chamada de uma linha de código para uma função-alvo.</para
 
517
></listitem
 
518
> <listitem
 
519
><para
 
520
> Uma chamada de uma função de origem para uma função de destino.</para
 
521
></listitem
 
522
> <listitem
 
523
><para
 
524
> Um salto (in)condicional de uma instrução de origem para uma de destino.</para
 
525
></listitem
 
526
> <listitem
 
527
><para
 
528
> Um salto (in)condicional de uma linha de origem para uma de destino.</para
 
529
></listitem
 
530
> </itemizedlist
 
531
> 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. </para>
 
532
 
 
533
</sect2>
 
534
 
 
535
 
 
536
<sect2>
 
537
<title
 
538
>Tipos de Eventos</title>
 
539
 
 
540
<para
 
541
>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. </para>
 
542
<para
 
543
>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. </para>
 
544
</sect2>
 
545
 
 
546
</sect1>
 
547
 
 
548
<sect1 id="concepts-state">
 
549
<title
 
550
>Visualização de Estado</title>
 
551
 
 
552
<para
 
553
>O estado da visualização de uma janela do &kcachegrind; inclui: <itemizedlist
 
554
> <listitem
 
555
><para
 
556
> o tipo primário e secundário dos eventos selecionados para mostrar, </para
 
557
></listitem
 
558
> <listitem
 
559
><para
 
560
> o agrupamento de funções (usado na lista da <guilabel
 
561
>Análise da Função</guilabel
 
562
> e na cor da entidade), </para
 
563
></listitem
 
564
> <listitem
 
565
><para
 
566
> as partes da análise cujos custos serão incluídos na visualização, </para
 
567
></listitem
 
568
> <listitem
 
569
><para
 
570
> uma entidade de custo ativa (&eg; uma função selecionada a partir da barra de análise da função), </para
 
571
></listitem
 
572
> <listitem
 
573
><para
 
574
> uma entidade de custo selecionada. </para
 
575
></listitem
 
576
> </itemizedlist
 
577
> Este estado influencia as visualizações. </para>
 
578
 
 
579
<para
 
580
>As visualizações são sempre apresentadas apenas para a entidade de custo atualmente ativa. Quando uma determinada visualização não é apropriada para uma entidade de custo, fica desativada: &eg;, ao selecionar um objeto &ELF; na lista de grupos a visão de anotação de código não faz sentido. </para>
 
581
 
 
582
<para
 
583
>Por exemplo para uma função ativa, a lista de chamadas mostra todas as funções chamadas a partir da ativa. Alguém pode selecionar uma destas funções sem torná-la ativa. Se o gráfico de chamada é mostrado logo ao lado, ele automaticamente selecionará a mesma função. </para>
 
584
 
 
585
</sect1>
 
586
 
 
587
<sect1 id="concepts-guiparts">
 
588
<title
 
589
>Partes da &GUI;</title>
 
590
 
 
591
<sect2>
 
592
<title
 
593
>Abas Laterais</title>
 
594
<para
 
595
>As barras laterais são janelas laterais que poderão ser colocadas em qualquer borda de uma janela do &kcachegrind;. Elas contêm sempre uma lista das entidades de custo, ordenadas de uma determinada forma. <itemizedlist>
 
596
<listitem
 
597
><para
 
598
>A <guilabel
 
599
>Análise de Função</guilabel
 
600
> é uma lista de funções mostrando custo inclusivo e exclusivo, contagem de chamadas, nome e posição de funções. </para
 
601
></listitem>
 
602
<listitem
 
603
><para>
 
604
<guilabel
 
605
>Introdução às Partes</guilabel>
 
606
</para
 
607
></listitem>
 
608
<listitem
 
609
><para>
 
610
<guilabel
 
611
>Pilha de Chamadas</guilabel>
 
612
</para
 
613
></listitem>
 
614
</itemizedlist>
 
615
</para>
 
616
</sect2>
 
617
 
 
618
<sect2>
 
619
<title
 
620
>Área de Visualização</title>
 
621
<para
 
622
>A área de visualização, tipicamente do lado direito da janela principal do &kcachegrind;, é composta por uma (a padrão) ou mais páginas, quer alinhadas na horizontal quer na vertical. Cada página contém diferentes áreas de visualização com apenas uma entidade de custo de cada vez. O nome desta entidade é indicado no topo da página. Se existirem várias páginas, só uma estará ativa. O nome da entidade da página ativa é mostrado em negrito e determina a entidade de custo ativa da janela do &kcachegrind;. </para>
 
623
</sect2>
 
624
 
 
625
<sect2>
 
626
<title
 
627
>Áreas de uma Página</title>
 
628
<para
 
629
>Cada visão em aba pode conter quatro áreas de visão, nomeadas Superior, Direita, Esquerda e Inferior. Cada área pode conter múltiplas visualizações empilhadas. A parte visível de uma área é selecionada por uma barra de abas. Barras de abas da área superior e direita estão no topo, barras de abas da área inferior e esquerda estão na base. Você pode especificar que tipo de visualização deve ser colocado em qual área usando o menu de contexto das abas. </para>
 
630
</sect2>
 
631
 
 
632
<sect2>
 
633
<title
 
634
>Visualização Sincronizada da Entidade Selecionada numa Página</title>
 
635
<para
 
636
>Além de uma entidade ativa, cada aba tem uma entidade selecionada. Como a maioria dos tipos de visualização mostram múltiplas entidades com a ativa centrada, você muda o item selecionado navegando dentro de uma visualização (clicando com o mouse ou usando o teclado). Tipicamente, itens selecionados são mostrado em um estado destacado. Mudando a entidade selecionada em uma das visões em aba, todas as outras visualizações destacarão a nova entidade selecionada. </para>
 
637
</sect2>
 
638
 
 
639
<sect2>
 
640
<title
 
641
>Sincronização entre Páginas</title>
 
642
<para
 
643
>Se existirem múltiplas páginas, uma mudança de seleção em uma página faz um mudança de ativação na página seguinte, seja à direita ou acima dela.. Este tipo de ligação por exemplo deve permitir uma rápida navegação nos gráficos de chamadas. </para>
 
644
</sect2>
 
645
 
 
646
<sect2>
 
647
<title
 
648
>Disposições</title>
 
649
<para
 
650
>A disposição de todas as páginas de uma janela poderá ser salva (veja o item do menu <menuchoice
 
651
><guimenu
 
652
>Ver </guimenu
 
653
><guisubmenu
 
654
>Disposição</guisubmenu
 
655
> </menuchoice
 
656
>). Após duplicar a disposição atual (<menuchoice
 
657
><shortcut
 
658
><keycombo action="simul"
 
659
>&Ctrl; <keycap
 
660
>+</keycap
 
661
></keycombo
 
662
></shortcut
 
663
> <guimenu
 
664
>Ver</guimenu
 
665
> <guisubmenu
 
666
>Disposição</guisubmenu
 
667
> <guimenuitem
 
668
>Duplicar</guimenuitem
 
669
> </menuchoice
 
670
>) e alterar alguns tamanhos ou mudar uma visualização para outra área de uma página, você poderá mudar rapidamente entre a disposição antiga e a nova por meio da combinação <keycombo action="simul"
 
671
>&Ctrl; <keycap
 
672
>←</keycap
 
673
></keycombo
 
674
> e <keycombo action="simul"
 
675
>&Ctrl; <keycap
 
676
>→</keycap
 
677
></keycombo
 
678
>. O conjunto de disposições será salvo entre sessões do &kcachegrind; do mesmo comando analisado. Você poderá tornar o conjunto de disposições o padrão para as novas sessões do &kcachegrind; ou restaurar o conjunto de disposições padrão. </para>
 
679
</sect2>
 
680
</sect1>
 
681
 
 
682
<sect1 id="concepts-sidedocks">
 
683
<title
 
684
>Abas Laterais</title>
 
685
 
 
686
<sect2>
 
687
<title
 
688
>Auditoria Plana</title>
 
689
<para
 
690
>A <guilabel
 
691
>Análise Simples</guilabel
 
692
> contém uma lista de grupos e outra lista de funções. A lista de grupos contém todos os grupos em que o custo é dispendido, dependendo do tipo de grupo escolhido. A lista de grupos fica oculta quando o agrupamento está desligado. </para>
 
693
<para
 
694
>A lista de funções contém as funções do grupo selecionado (ou todas as funções se o agrupamento estiver desligado), ordenadas por uma determinada coluna, &eg; os custos da própria ou os custos inclusos dispendidos até então. Existe um número máximo de funções apresentado na lista que é configurável na opção <menuchoice
 
695
><guimenu
 
696
>Configurações</guimenu
 
697
> <guimenuitem
 
698
>Configurar o &kcachegrind;</guimenuitem
 
699
></menuchoice
 
700
>. </para>
 
701
</sect2>
 
702
 
 
703
<sect2>
 
704
<title
 
705
>Visão Geral das Partes</title>
 
706
<para
 
707
>Na execução de uma análise, poderão ser produzidos vários arquivos de dados de análise que poderão ser carregados juntamente no &kcachegrind;. A barra de <guilabel
 
708
>Visão Geral das Partes</guilabel
 
709
> mostra estes arquivos, ordenados na horizontal de acordo com a hora de criação; os tamanhos dos retângulo são proporcionais ao custo dispendido nas partes. Você poderá selecionar uma ou várias partes para restringir os custos apresentados nas outras zonas do &kcachegrind; apenas para estas partes. </para>
 
710
<para
 
711
>As partes são, por sua vez, subdivididas num modo de partição e num modo repartido por custo inclusivo: <variablelist>
 
712
<varlistentry>
 
713
<term
 
714
><guilabel
 
715
>Modo de Partição</guilabel
 
716
></term>
 
717
<listitem
 
718
><para
 
719
>A repartição é exibida em grupos para uma parte de dados de análise, de acordo com o tipo de grupo selecionado. Por exemplo, se forem selecionados os grupos de objetos &ELF;, você irá ver retângulos coloridos para cada objeto &ELF; usado (biblioteca dinâmica ou executável), dimensionado de acordo com o custo nele dispendido. </para
 
720
></listitem>
 
721
</varlistentry>
 
722
<varlistentry>
 
723
<term
 
724
><guilabel
 
725
>Modo de Diagrama</guilabel
 
726
></term>
 
727
<listitem
 
728
><para
 
729
>Um retângulo mostrando o custo inclusivo da função ativa atual na parte é mostrado. Ele divide-se novamente para mostrar os custos inclusivos de suas chamadas. </para
 
730
></listitem>
 
731
</varlistentry>
 
732
</variablelist>
 
733
</para>
 
734
</sect2>
 
735
 
 
736
<sect2>
 
737
<title
 
738
>Pilha de Chamadas</title>
 
739
<para
 
740
>Isto é uma pilha de chamadas <quote
 
741
>mais provável</quote
 
742
> puramente fictícia. Ela é construída iniciando com a função ativa atual e adicionar as chamadas e chamados com custo mais alto de cima para baixo. </para>
 
743
<para
 
744
>As colunas <guilabel
 
745
>Custo</guilabel
 
746
> e <guilabel
 
747
>Chamadas</guilabel
 
748
> mostram o custo usado para todas as chamadas a partir da função na linha acima. </para>
 
749
</sect2>
 
750
</sect1>
 
751
 
 
752
<sect1 id="concepts-views">
 
753
<title
 
754
>Visões</title>
 
755
 
 
756
<sect2>
 
757
<title
 
758
>Tipo de Evento</title>
 
759
<para
 
760
>A lista <guilabel
 
761
>Tipo de Evento</guilabel
 
762
> mostra todos os tipos de custo disponíveis e o custo próprio correspondente e inclusivo da função ativa atual para o tipo de evento especificado. </para>
 
763
<para
 
764
>Se escolher um tipo de evento na lista, você poderá alterar o tipo de custos apresentados em todo o &kcachegrind; para o tipo selecionado. </para>
 
765
</sect2>
 
766
 
 
767
<sect2>
 
768
<title
 
769
>Lista de Chamadas</title>
 
770
<para
 
771
>Estas listas mostram as chamadas de e para a função atualmente ativa. Entende-se por <guilabel
 
772
>Todos os Chamadores</guilabel
 
773
> e <guilabel
 
774
>Todos os Chamados</guilabel
 
775
> as funções que poderão ser acessadas no sentido da chamadora e chamada, mesmo que existam outras funções no meio. </para>
 
776
 
 
777
<para
 
778
>Visões de lista de chamada incluem: <itemizedlist>
 
779
<listitem
 
780
><para
 
781
><guilabel
 
782
>Chamadores</guilabel
 
783
> Diretos</para
 
784
></listitem>
 
785
<listitem
 
786
><para
 
787
><guilabel
 
788
>Chamados</guilabel
 
789
> Diretos</para
 
790
></listitem>
 
791
<listitem
 
792
><para
 
793
><guilabel
 
794
>Todos os Chamadores</guilabel
 
795
></para
 
796
></listitem>
 
797
<listitem
 
798
><para
 
799
><guilabel
 
800
>Todas as chamadas</guilabel
 
801
></para
 
802
></listitem>
 
803
</itemizedlist>
 
804
</para>
 
805
</sect2>
 
806
 
 
807
<sect2>
 
808
<title
 
809
>Mapas</title>
 
810
<para
 
811
>Uma visão de mapa em árvore do tipo de evento primário, acima e abaixo da hierarquia de chamadas. Cada retângulo colorido representa uma função; seu tamanho é aproximadamente proporcional ao custo gasto nela enquanto a função ativa estiver em execução (no entanto, existem restrições de desenho). </para>
 
812
<para
 
813
>Para o <guilabel
 
814
>Mapa dos Chamadores</guilabel
 
815
>, o gráfico mostra a hierarquia encadeada de todas as funções que chamam a função atualmente ativa; no caso do <guilabel
 
816
>Mapa dos Chamados</guilabel
 
817
>, mostra a hierarquia respectiva, mas para as funções chamadas pela função ativa. </para>
 
818
<para
 
819
>As opções de aparência poderão ser acessadas no menu de contexto. Para obter proporções de tamanho exatas, escolha a opção <guimenuitem
 
820
>Pular bordas incorretas</guimenuitem
 
821
>. Uma vez que este modo poderá tomar bastante tempo, o usuário poderá desejar limitar o nível máximo de encadeamento do desenho antes. O <guilabel
 
822
>Melhor</guilabel
 
823
> determina a direção da repartição dos filhos, a partir das proporções do pai. O <guilabel
 
824
>Sempre o Melhor</guilabel
 
825
> decide sobre o espaço restante de cada elemento do mesmo nível. O <guilabel
 
826
>Ignorar as Proporções</guilabel
 
827
> ocupa o espaço para o nome da função, antes de desenhar os filhos. Lembre-se que as proporções podem ficar totalmente erradas. </para>
 
828
<para
 
829
>A navegação pelo teclado está disponível com as teclas de seta esquerda e direita para navegar por irmãos, e teclas de seta acima e abaixo para ir um nível aninhado acima e abaixo. &Enter; ativa o item atual. </para>
 
830
</sect2>
 
831
 
 
832
<sect2>
 
833
<title
 
834
>Gráfico de Chamadas</title>
 
835
<para
 
836
>Esta janela mostra o gráfico de chamadas em torno da função ativa. O custo apresentado é apenas o custo dispendido enquanto a função estava de fato rodando; &ie;, o custo mostrado para o <function
 
837
>main()</function
 
838
> (se for visível) deverá ser o mesmo que o custo da função ativa, uma vez que faz parte do custo inclusivo do <function
 
839
>main()</function
 
840
> dispendido enquanto a função ativa estava em execução. </para>
 
841
<para
 
842
>Para os ciclos, as setas de chamadas em azul indicam que esta é uma chamada artificial adicionada para desenhar corretamente o que, de fato, nunca ocorreu. </para>
 
843
<para
 
844
>Se o grafo for maior que a área de desenho, é mostrada uma visão geral num dos lados. Existem opções de visualização semelhantes às do mapa de chamadas; a função selecionada está realçada. </para>
 
845
</sect2>
 
846
 
 
847
<sect2>
 
848
<title
 
849
>Anotações</title>
 
850
<para
 
851
>A lista de código ou assembler anotado mostra as instruções da linha de código ou desassembladas da função ativa atual junto com o custo (próprio) gasto ao executar o código de uma linha fonte ou instrução. Se existir uma chamada, linhas com detalhes sobre a chamada serão inseridas na fonte: o custo (inclusivo) gasto dentro de uma chamada, o número de chamadas que ocorreram, e o destino da chamada. </para>
 
852
<para
 
853
>Selecione uma linha de informação de chamada para ativar o destino da chamada. </para>
 
854
</sect2>
 
855
</sect1>
 
856
 
 
857
</chapter>
 
858
 
 
859
 
 
860
<chapter id="commands">
 
861
<title
 
862
>Referência de comandos</title>
 
863
 
 
864
<sect1 id="kcachegrind-mainwindow">
 
865
<title
 
866
>A janela principal do &kcachegrind;</title>
 
867
 
 
868
<sect2>
 
869
<title
 
870
>O menu <guimenu
 
871
>Arquivo</guimenu
 
872
></title>
 
873
<para>
 
874
<variablelist>
 
875
 
 
876
<varlistentry>
 
877
<term
 
878
><menuchoice
 
879
><shortcut
 
880
> <keycombo
 
881
>&Ctrl;<keycap
 
882
>N</keycap
 
883
></keycombo
 
884
> </shortcut
 
885
> <guimenu
 
886
>Arquivo</guimenu
 
887
> <guimenuitem
 
888
>Novo</guimenuitem
 
889
> </menuchoice
 
890
></term>
 
891
<listitem
 
892
><para
 
893
><action
 
894
>Abre uma janela de nível superior vazia</action
 
895
> de onde você pode carregar dados de perfil. Esta ação não é realmente necessária, uma vez que <menuchoice
 
896
><guimenu
 
897
>Arquivo</guimenu
 
898
> <guimenuitem
 
899
>Abrir</guimenuitem
 
900
> </menuchoice
 
901
> lhe fornecerá uma nova janela de nível superior quando a atual já estiver exibindo algum dado. </para
 
902
></listitem>
 
903
</varlistentry>
 
904
 
 
905
<varlistentry>
 
906
<term
 
907
><menuchoice
 
908
><shortcut
 
909
> <keycombo
 
910
>&Ctrl;<keycap
 
911
>O</keycap
 
912
></keycombo
 
913
> </shortcut
 
914
> <guimenu
 
915
>Arquivo</guimenu
 
916
> <guimenuitem
 
917
>Abrir</guimenuitem
 
918
> </menuchoice
 
919
></term>
 
920
<listitem>
 
921
<para
 
922
><action
 
923
>Exibe o seletor de arquivos do &kde;</action
 
924
> para escolher um arquivo de dados de auditoria a ser carregado. Se já existir algum dado sendo mostrado na janela de nível superior atual, ele abrirá uma nova janela. Se você deseja abrir dados de auditoria adicionais na janela atual, use <menuchoice
 
925
><guimenu
 
926
>Arquivo</guimenu
 
927
> <guimenuitem
 
928
>Adicionar</guimenuitem
 
929
> </menuchoice
 
930
>. </para>
 
931
<para
 
932
>O nome dos arquivos de dados de análise normalmente termina em <literal role="extension"
 
933
>.<replaceable
 
934
>pid</replaceable
 
935
>.<replaceable
 
936
>part</replaceable
 
937
>-<replaceable
 
938
>idTarefa</replaceable
 
939
></literal
 
940
>, onde o <replaceable
 
941
>part</replaceable
 
942
> e o <replaceable
 
943
>idTarefa</replaceable
 
944
> são opcionais e; o <replaceable
 
945
>pid</replaceable
 
946
> e o <replaceable
 
947
>part</replaceable
 
948
> opcionais são usados para vários arquivos de dados de análise que pertençam uma execução de uma aplicação. Ao ler um arquivo que termine apenas em <literal role="extension"
 
949
><replaceable
 
950
>pid</replaceable
 
951
></literal
 
952
>, os arquivos de dados eventualmente existentes para esta execução, mas sem terminações adicionais, são também carregados. </para>
 
953
<informalexample
 
954
><para
 
955
>Se existir arquivos de dados de auditoria <filename
 
956
>cachegrind.out.123</filename
 
957
> e <filename
 
958
>cachegrind.out.123.1</filename
 
959
>, carregando o primeiro, o segundo será automaticamente carregado também. </para
 
960
></informalexample
 
961
></listitem>
 
962
</varlistentry>
 
963
 
 
964
<varlistentry>
 
965
<term
 
966
><menuchoice
 
967
><guimenu
 
968
>Arquivo</guimenu
 
969
><guimenuitem
 
970
>Adicionar</guimenuitem
 
971
> </menuchoice
 
972
></term>
 
973
<listitem
 
974
><para
 
975
><action
 
976
>Adiciona uma arquivo de dados de auditoria</action
 
977
> à janela atual. Com isto, você pode forçar que arquivos de dados múltiplos sejam carregados em uma mesma janela de nível superior mesmo se eles não vierem da mesma execução fornecida por uma convenção de nomeação de arquivos de dados de auditoria. Por exemplo, use-o para comparações lado a lado. </para
 
978
></listitem>
 
979
</varlistentry>
 
980
 
 
981
<varlistentry>
 
982
<term
 
983
><menuchoice
 
984
><shortcut
 
985
> <keycombo
 
986
><keycap
 
987
>F5</keycap
 
988
></keycombo
 
989
> </shortcut
 
990
> <guimenu
 
991
>Arquivo</guimenu
 
992
><guimenuitem
 
993
>Recarregar</guimenuitem
 
994
> </menuchoice
 
995
></term>
 
996
<listitem
 
997
><para
 
998
><action
 
999
>Recarrega os dados de auditoria</action
 
1000
>. Isto é útil quando outro arquivo de dados de auditoria foi gerado pela execução de um aplicativo já carregado. </para
 
1001
></listitem>
 
1002
</varlistentry>
 
1003
 
 
1004
<varlistentry>
 
1005
<term
 
1006
><menuchoice
 
1007
><shortcut
 
1008
> <keycombo
 
1009
>&Ctrl;<keycap
 
1010
>Q</keycap
 
1011
></keycombo
 
1012
> </shortcut
 
1013
> <guimenu
 
1014
>Arquivo</guimenu
 
1015
> <guimenuitem
 
1016
>Sair</guimenuitem
 
1017
> </menuchoice
 
1018
></term>
 
1019
<listitem
 
1020
><para
 
1021
><action
 
1022
>Sai</action
 
1023
> do &kappname;</para
 
1024
></listitem>
 
1025
</varlistentry>
 
1026
</variablelist>
 
1027
</para>
 
1028
 
 
1029
</sect2>
 
1030
 
 
1031
</sect1>
 
1032
</chapter>
 
1033
 
 
1034
<chapter id="faq">
 
1035
<title
 
1036
>Perguntas e respostas</title>
 
1037
&reporting.bugs; &updating.documentation; <qandaset id="faqlist">
 
1038
 
 
1039
 
 
1040
<qandaentry>
 
1041
<question>
 
1042
<para
 
1043
>Para que serve o &kcachegrind;? Eu não faço a mínima ideia. </para>
 
1044
</question>
 
1045
<answer>
 
1046
<para
 
1047
>O &kcachegrind; é útil no último estágio de desenvolvimento de software, chamado auditoria. Se você não desenvolve aplicativos, você não precisa do &kcachegrind;. </para>
 
1048
</answer>
 
1049
</qandaentry>
 
1050
 
 
1051
<qandaentry>
 
1052
<question>
 
1053
<para
 
1054
>Qual é a diferença entre o <guilabel
 
1055
>Inclusivo</guilabel
 
1056
> e o <guilabel
 
1057
>Próprio</guilabel
 
1058
>? </para>
 
1059
</question>
 
1060
<answer>
 
1061
<para
 
1062
>Estes são atributos de custo para funções relativos a algum tipo de evento. Como funções podem chamar outras, faz sentido distinguir o custo da função propriamente dita (<quote
 
1063
>Custo Próprio</quote
 
1064
>) e o custo incluindo todas as chamadas de funções (<quote
 
1065
>Custo Inclusivo</quote
 
1066
>). <quote
 
1067
>Próprio</quote
 
1068
> é algumas vezes também referenciado como custo <quote
 
1069
>Exclusivo</quote
 
1070
>. </para>
 
1071
<para
 
1072
>Assim, por exemplo para o <function
 
1073
>main()</function
 
1074
>, você sempre terá um custo inclusivo de cerca de 100%, visto que o custo próprio e negligenciado quando o trabalho real é feito em outra função. </para>
 
1075
</answer>
 
1076
</qandaentry>
 
1077
 
 
1078
<qandaentry>
 
1079
<question>
 
1080
<para
 
1081
>A barra de ferramentas e menu do meu &kcachegrind; está tão esquisita. Isto é normal?</para>
 
1082
</question>
 
1083
<answer>
 
1084
<para
 
1085
>O &kcachegrind; está provavelmente mal instalado no seu sistema. Recomenda-se que o compile com o prefixo de instalação igual à sua pasta de base do sistema &kde;, como por exemplo o comando <userinput
 
1086
><command
 
1087
>configure <option
 
1088
>--prefix=<replaceable
 
1089
>/opt/kde4</replaceable
 
1090
></option
 
1091
></command
 
1092
>; <command
 
1093
>make install</command
 
1094
></userinput
 
1095
>. Se escolher outra pasta, como a <filename class="directory"
 
1096
>$<envar
 
1097
>HOME</envar
 
1098
>/kde</filename
 
1099
>, você deverá apontar a variável de ambiente <envar
 
1100
>KDEDIR</envar
 
1101
> para esta pasta antes de executar o &kcachegrind;. </para>
 
1102
</answer>
 
1103
</qandaentry>
 
1104
 
 
1105
<qandaentry>
 
1106
<question>
 
1107
<para
 
1108
>Se eu der um duplo-clique em uma função abaixo da visão do <guilabel
 
1109
>Gráfico de Chamadas</guilabel
 
1110
>, ele mostra para a função <function
 
1111
>main()</function
 
1112
> o mesmo custo da função selecionada. Isto não é supostamente para ser 100% constante? </para>
 
1113
</question>
 
1114
<answer>
 
1115
<para
 
1116
>Você ativou uma função sob a <function
 
1117
>main()</function
 
1118
> com um custo menor que o da <function
 
1119
>main()</function
 
1120
>. Para qualquer função, só é apresentada essa parte do custo completo da função, sendo ela dispendida enquanto a função <emphasis
 
1121
>ativa</emphasis
 
1122
> está em execução, isto é, o custo mostrado para qualquer função nunca pode ser maior que o custo da função ativada. </para>
 
1123
</answer>
 
1124
</qandaentry>
 
1125
 
 
1126
 
 
1127
</qandaset>
 
1128
</chapter>
 
1129
 
 
1130
 
 
1131
<glossary>
 
1132
 
 
1133
<glossentry id="costentity">
 
1134
<glossterm
 
1135
>Entidade de Custo</glossterm>
 
1136
<glossdef
 
1137
><para
 
1138
>Um item abstrato relacionado com o código-fonte, para o qual poderão ser atribuídas as contagens de eventos. As dimensões das entidades de custo são a localização no código (&eg;, linha de código, função), a localização dos dados (&eg; tipo dos dados acessados, o objeto de dados), a localização da execução (&eg;, a tarefa ou processo) e os tuplos das posições acima indicadas (&eg;, as chamadas, o acesso aos objetos pela instrução, os dados obtidos a partir da 'cache').</para
 
1139
></glossdef>
 
1140
</glossentry>
 
1141
 
 
1142
<glossentry id="eventcosts">
 
1143
<glossterm
 
1144
>Custos do Evento</glossterm>
 
1145
<glossdef
 
1146
><para
 
1147
>Soma de eventos de algum tipo de evento ocorrido durante a execução é relacionada a alguma entidade de custo. O custo é atribuído à entidade.</para
 
1148
></glossdef>
 
1149
</glossentry>
 
1150
 
 
1151
<glossentry id="eventtype">
 
1152
<glossterm
 
1153
>Tipo de Evento</glossterm>
 
1154
<glossdef
 
1155
><para
 
1156
>O tipo de evento do qual custos podem ser atribuídos para uma entidade de custo. Aqui existem tipos de eventos reais e tipos de eventos herdados.</para
 
1157
></glossdef>
 
1158
</glossentry>
 
1159
 
 
1160
<glossentry id="inheritedeventtype">
 
1161
<glossterm
 
1162
>Tipo de Evento Herdado</glossterm>
 
1163
<glossdef
 
1164
><para
 
1165
>Um tipo de evento virtual somente visível na visão, definido por uma fórmula a ser calculada a partir de tipos de eventos reais.</para
 
1166
></glossdef>
 
1167
</glossentry>
 
1168
 
 
1169
<glossentry id="profiledatafile">
 
1170
<glossterm
 
1171
>Arquivo de Dados de Análise</glossterm>
 
1172
<glossdef
 
1173
><para
 
1174
>Um arquivo contendo dados medidos em um experimento de auditoria, ou parte de um, ou produzidos por processamento posterior de um rastreio. Seu tamanho é tipicamente linear em função do tamanho do código do programa.</para
 
1175
></glossdef>
 
1176
</glossentry>
 
1177
 
 
1178
<glossentry id="profiledatapart">
 
1179
<glossterm
 
1180
>Componente de Dados de Análise</glossterm>
 
1181
<glossdef
 
1182
><para
 
1183
>Dados de um arquivo de dados de análise.</para
 
1184
></glossdef>
 
1185
</glossentry>
 
1186
 
 
1187
<glossentry id="profileexperiment">
 
1188
<glossterm
 
1189
>Experiência de Análise</glossterm>
 
1190
<glossdef
 
1191
><para
 
1192
>Um programa executado sob supervisão de uma ferramenta de auditoria, produzindo possivelmente múltiplos arquivos de dados de auditoria a partir de partes ou linhas de execução.</para
 
1193
></glossdef>
 
1194
</glossentry>
 
1195
 
 
1196
<glossentry id="profileproject">
 
1197
<glossterm
 
1198
>Projeto de Análise</glossterm>
 
1199
<glossdef
 
1200
><para
 
1201
>Uma configuração para experimentos de auditoria usados para um programa que será auditado, talvez em versões múltiplas. Comparações de dados auditados tipicamente só fazem sentido entre dados auditados produzidos em experimentos de um projeto de auditoria.</para
 
1202
></glossdef>
 
1203
</glossentry>
 
1204
 
 
1205
<glossentry id="profiling">
 
1206
<glossterm
 
1207
>Auditoria</glossterm>
 
1208
<glossdef
 
1209
><para
 
1210
>O processo de coletar informações estatísticas sobre as características de tempo de execução de um programa.</para
 
1211
></glossdef>
 
1212
</glossentry>
 
1213
 
 
1214
<glossentry id="realeventtype">
 
1215
<glossterm
 
1216
>Tipo de Evento Real</glossterm>
 
1217
<glossdef
 
1218
><para
 
1219
>Um tipo de evento que pode ser medido por uma ferramenta. Ele requer a existência de um sensor para o tipo de evento fornecido.</para
 
1220
></glossdef>
 
1221
</glossentry>
 
1222
 
 
1223
<glossentry id="trace">
 
1224
<glossterm
 
1225
>Rastreio</glossterm>
 
1226
<glossdef
 
1227
><para
 
1228
>Uma sequência de eventos com estampas de tempo que ocorreram durante o rastreamento da execução de um programa. Seu tamanho é tipicamente linear em função do tempo de execução de um programa.</para
 
1229
></glossdef>
 
1230
</glossentry>
 
1231
 
 
1232
<glossentry id="tracepart">
 
1233
<glossterm
 
1234
>Componente de Rastreio</glossterm>
 
1235
<glosssee otherterm="profiledatapart"/>
 
1236
</glossentry>
 
1237
 
 
1238
<glossentry id="tracing">
 
1239
<glossterm
 
1240
>Rastreamento</glossterm>
 
1241
<glossdef
 
1242
><para
 
1243
>O processo de supervisionar a execução de um programa e armazenar eventos ocorridos ordenados por uma estampa de tempo em um arquivo de saída, o rastreio.</para
 
1244
></glossdef>
 
1245
</glossentry>
 
1246
 
 
1247
</glossary>
 
1248
 
 
1249
<chapter id="credits">
 
1250
 
 
1251
<title
 
1252
>Créditos e licença</title>
 
1253
 
 
1254
<para
 
1255
>Obrigado ao Julian Seward pelo seu excelente &valgrind;, e ao Nicholas Nethercote pela adição do &cachegrind;. Sem estes programas, o &kcachegrind; não existiria. Algumas das ideias para esta &GUI; foram dadas por eles, também. </para>
 
1256
<para
 
1257
>Agradecimentos a todos os diferentes usuários que reportaram erros e sugestões. </para>
 
1258
 
 
1259
<para
 
1260
>Tradução de Marcus Gama <email
 
1261
>marcus.gama@gmail.com</email
 
1262
></para
 
1263
 
1264
&underFDL; </chapter>
 
1265
 
 
1266
<appendix id="installation">
 
1267
<title
 
1268
>Instalação</title>
 
1269
 
 
1270
<sect1 id="getting-kcachegrind">
 
1271
<title
 
1272
>Como obter o &kcachegrind;</title>
 
1273
 
 
1274
<para
 
1275
>O &kcachegrind; faz parte do pacote &package; do &kde;. Para as versões intermediárias menos suportadas, o &callgrind; e a documentação futura, veja na <ulink url="http://kcachegrind.sf.net"
 
1276
>página pessoal do projeto</ulink
 
1277
> para obter mais instruções de instalação e compilação. </para>
 
1278
</sect1>
 
1279
 
 
1280
<sect1 id="requirements">
 
1281
<title
 
1282
>Requisitos</title>
 
1283
 
 
1284
<para
 
1285
>Para poder usar com sucesso o &kcachegrind;, você precisa do &kde; 4.x. Para gerar os registros das análises, o &cachegrind; ou o &calltree;/&callgrind; é recomendado. </para>
 
1286
</sect1>
 
1287
 
 
1288
<sect1 id="compilation">
 
1289
<title
 
1290
>Compilação e instalação</title>
 
1291
&install.compile.documentation; </sect1>
 
1292
 
 
1293
<sect1 id="configuration">
 
1294
<title
 
1295
>Configuração</title>
 
1296
 
 
1297
<para
 
1298
>Todas as opções de configuração encontram-se na janela de configuração ou nos menus de contexto dos gráficos.</para>
 
1299
 
 
1300
</sect1>
 
1301
 
 
1302
</appendix>
 
1303
 
 
1304
&documentation.index;
 
1305
</book>