<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
  <!ENTITY kcachegrind '<application
>KCachegrind</application
>'>
  <!ENTITY cachegrind "<application
>Cachegrind</application
>">
  <!ENTITY valgrind "<application
>Valgrind</application
>">
  <!ENTITY kappname "&kcachegrind;">
  <!ENTITY package "kdesdk">
  <!ENTITY % addindex "IGNORE">
  <!ENTITY % Brazilian-Portuguese "INCLUDE">
]>

<!-- ................................................................ -->

<book lang="&language;">

<bookinfo>
<title
>O Manual do &kcachegrind;</title>

<authorgroup>
<author
><firstname
>Josef</firstname
> <surname
>Weidendorfer</surname
> <affiliation
> <address
><email
>Josef.Weidendorfer@gmx.de</email
></address>
</affiliation>
</author>
</authorgroup>

<copyright>
<year
>2002</year>
<holder
>Josef Weidendorfer</holder>
</copyright>
<legalnotice
>&FDLNotice;</legalnotice>

<date
>2003-09-18</date>
<releaseinfo
>0.4.3</releaseinfo>

<abstract>
<para
>O &kcachegrind; é um Frontend do &kde; para o &cachegrind;, parte do &valgrind;. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdesdk</keyword>
<keyword
>Cachegrind</keyword>
<keyword
>Valgrind</keyword>
<keyword
>Auditoria</keyword>
</keywordset>

</bookinfo>


<chapter id="introduction">
<title
>Introdução</title>

<para
>Quando você desenvolve um programa, muitas vezes um dos últimos passos é torná-lo o mais rápido possível (mas ainda funcional!). Você não deseja desperdiçar seu tempo otimizando funções que raramente são usadas. Logo você precisa saber em qual parte do seu programa a maior parte do tempo é consumido. </para>

<para
>Isto é chamado Auditoria. O programa é executado sob o controle de uma ferramenta de auditoria, que fornece um rastro da execução do programa. Após a examinação deste rastro, você provavelmente saberá onde otimizar e, após isso, você poderá verificar o sucesso da otimização com outra auditoria. </para>

<para
>Uma ferramenta de auditoria muito conhecida do GCC é o <application
>gprof</application
>: Você precisa compilar seu programa com a opção <option
>-pg</option
>; executar o programa gerando um arquivo <filename
>gmon.out</filename
>, que será transformado para uma forma legível pelos humanos com o <command
>gprof</command
>. A desvantagem é a necessidade do passo de compilação para um executável preparado, que deve ser ligado estaticamente. </para>

<para
>Outra ferramenta de auditoria é o &cachegrind;, parte do &valgrind;. Ele usa a emulação do processador do &valgrind; para executar o programa, e captura todos os acessos de memória para rastreamento. O programa não precisa ser recompilado; ele pode usar bibliotecas compartilhadas e plugins, e as medidas de auditoria não influenciam os resultados do rastreamento. São rastreados o número de instruções/acesso à dados na memória e perdas nas caches de nível 1 e 2, e relaciona-o às linhas de código e funções do programa executável (uma desvantagem é o menor desempenho em virtude da emulação do processador, que é infelizmente cerca de 50 vezes mais lento). </para>

<para
>Uma adição às fontes do &valgrind; 1.0.x adiciona rastreamento de árvore de chamadas, &ie; como as funções chamam umas às outras e quantos eventos ocorrem durante a execução de uma função (incluindo todas as funções chamadas). </para>

<para
>O &kappname; é uma ferramenta de visualização para os dados da auditoria gerados pelo &cachegrind;. É altamente recomendável para adicionar suporte ao rastreamento da árvore de chamadas no &cachegrind;, porque o &kcachegrind; é muito mais útil deste modo. </para>
</chapter>

<chapter id="using-kcachegrind">
<title
>Usando o &kcachegrind;</title>

<note>
<para
>Cada widget no &kcachegrind; possui uma ajuda <quote
>O que é isto</quote
>. Se você não deseja procurar nesta documentação, use-a! </para>
</note>

<sect1>
<title
>Exemplos Rápidos</title>


<para
>Simplesmente execute-o!</para>
</sect1>

<sect1 id="features">
<title
>Recursos do &kcachegrind;</title>

<para
>Suporta: eventos arbitrários, agrupamento de funções</para>
</sect1>

<sect1 id="guidelines">
<title
>Linhas Gerais</title>

<para
>Auditoria Efetiva...</para>

</sect1>
<sect1 id="tutorial">
<title
>Tutorial</title>

<para
>Uma sessão de auditoria no &kcachegrind;.</para>

</sect1>
</chapter>

<chapter id="commands">
<title
>Referência de Comandos</title>

<sect1 id="kcachegrind-mainwindow">
<title
>A janela principal do &kcachegrind;</title>
<para
></para>

<sect2>
<title
>O Menu <guimenu
>Arquivo</guimenu
></title>
<para>
<variablelist>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>N</keycap
></keycombo
> </shortcut
> <guimenu
>Arquivo</guimenu
> <guimenuitem
>Novo</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Cria um novo documento</action
></para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>S</keycap
></keycombo
> </shortcut
> <guimenu
>Arquivo</guimenu
> <guimenuitem
>Salvar</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Salva o documento</action
></para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>S</keycap
></keycombo
> </shortcut
> <guimenu
>Arquivo</guimenu
> <guimenuitem
>Sair</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Sai</action
> do &kappname;</para
></listitem>
</varlistentry>
</variablelist>
</para>

</sect2>

</sect1>
</chapter>

<chapter id="faq">
<title
>Perguntas e Respostas</title>
&reporting.bugs; &updating.documentation; <qandaset id="faqlist">
<qandaentry>
<question>
<para
>O &kcachegrind; parece ser legal. Mas eu não entendo. Para quê ele é útil?</para>
</question>
<answer>
<para
>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>
</answer>
</qandaentry>
<qandaentry>
<question>
<para
>Eu estou tendo erros de compilação, o que este problema pode ser?</para>
</question>
<answer>
<para
>Freqüentemente, sua instalação do &Qt; não tem suporte ao &kde;. </para>
</answer>
</qandaentry>
</qandaset>
</chapter>

<chapter id="credits">


<title
>Créditos e Licença</title>

<para
>&kappname; </para>
<para
>Agradecimentos à Julian Seward pelo excelente &valgrind;, e Nicholas Nethercote pela adição do &cachegrind;. Sem estes programas, e da adição de árvore de chamadas ao &valgrind;, o <application
>KCachegrind</application
> não existiria. Muitas idéias para esta &GUI; também vieram deles. </para>
<para
>E agradecimentos a todos os diferentes usuários que reportaram erros/sugestões. Por último, mas não menos importante, agradecimentos à <itemizedlist>
<listitem
><para
>O maravilhoso Aplicativo de ambiente de trabalho &kde;,</para>
</listitem>
<listitem
><para
>&Qt;, o kit de ferramentas &GUI; perfeito</para>
</listitem>
<listitem
><para
>&Linux;, o <acronym
>SO</acronym
> definitivo</para>
</listitem>
</itemizedlist>
</para>
&underFDL; </chapter>

<appendix id="installation">
<title
>Instalação</title>

<sect1 id="getting-kcachegrind">
<title
>Como obter o &kcachegrind;</title>

<para
>O &kcachegrind; encontra-se na página web em <ulink url="http://www.weidendorfers.de/kcachegrind"
> http://www.weidendorfers.de/kcachegrind</ulink
>. Lá você obterá instruções completas para instalação e compilação. </para>
</sect1>

<sect1 id="requirements">
<title
>Requisitos</title>

<para
>Para usar com sucesso o &kcachegrind;, você precisa do &kde; 3.x. Para gerar auditoria de rastros, o &cachegrind; é necessário. Para permitir opções mais interessantes de visualização do &kcachegrind;, aplica a adição de árvore de chamadas da página web do &kcachegrind; ao seu código do &valgrind;. </para>
</sect1>

<sect1 id="compilation">
<title
>Compilação e Instalação</title>
&install.compile.documentation; </sect1>

<sect1 id="configuration">
<title
>Configuração</title>

<para
>Todas as opções de configuração estão tanto no diálogo de configuração como nos menus de contexto dos gráficos. </para>

</sect1>

</appendix>

&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->













