<?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 % Portuguese "INCLUDE">
]>

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

<book lang="&language;">

<bookinfo>
<title
>O Manuald 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; é uma interface para o &kde; do &cachegrind;, que faz parte do &valgrind;. </para>
</abstract>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>kdesdk</keyword>
<keyword
>Cachegrind</keyword>
<keyword
>Valgrind</keyword>
<keyword
>Análise</keyword>
</keywordset>

</bookinfo>


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

<para
>Quando você desenvolve um programa, normalmente uma das últimas tarefas é torná-lo o mais rápido possível (mantendo-se à mesma correcto!). Você não irá querer perder o seu tempo a optimizar funções que são raramente utilizadas. Por isso, convém você saber em que parte do seu programa a maioria do tempo é dispendido. </para>

<para
>Esta análise é normalmente denominada por 'Profiling' na literatura, mas vamos usar o termo análise aqui. O programa é executado sob o controlo de uma ferramenta de análise que lhe dar um registo da execução. Depois de examinar esse registo, você irá ficar a saber onde optimizar e depois verificar o sucesso dessa optimização com outra execução da análise. </para>

<para
>A ferramenta de análise mais conhecida é o <application
>gprof</application
> do GCC: Você precisa de compilar o seu programa com a opção <option
>-pg</option
>; se correr o programa, irá gerar um ficheiro <filename
>gmon.out</filename
>, o qual poderá ser transformado num formato legível com o <command
>gprof</command
>. A desvantagem é o passo de compilação necessário para um dado executável, o qual terá de ser compilado estaticamente. </para>

<para
>Outra ferramenta de análise é o &cachegrind;, o qual faz parte do &valgrind;. Ele usa a emulação do processador do &valgrind; para correr o executável e captura todos os acessos de memória para o registo. O programa não precisa de ser recompilado; ele poderá usar bibliotecas dinâmicas e 'plugins', e a medida de análise não irá afectar os resultados do registo. O registo inclui o número de acessos a instruções/dados e as falhas da 'cache' de 1º/2º nível, relacionando-os com as linhas de código e as funções do programa executado (uma desvantagem é o atraso envolvido na emulação do processador, o que equivale a 50 vezes mais lento, infelizmente). </para>

<para
>Uma alteração ao código do &valgrind; 1.0.x adiciona o registo da árvore de chamadas, &ie; como é que as funções se chamam umas às outras e quantos eventos decorrem ao executar uma função (incluindo todas as funções que são chamadas). </para>

<para
>O &kappname; é uma ferramenta de visualização para os dados da análise gerada pelo &cachegrind;. É altamente aconselhado adicionar o suporte para o registo da árvore de chamadas no &cachegrind;, dado que o &kcachegrind; é muito mais útil desta forma. </para>
</chapter>

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

<note>
<para
>Cada item no &kcachegrind; tem uma ajuda <quote
>O Que É Isto?</quote
>. Se não quiser procurar nesta documentação, use essa ajuda! </para>
</note>

<sect1>
<title
>Exemplos Introdutórios</title>


<para
>Basta executá-lo!</para>
</sect1>

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

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

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

<para
>Análise Efectiva...</para>

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

<para
>Uma sessão de análise 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
>Ficheiro</guimenu
></title>
<para>
<variablelist>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>N</keycap
></keycombo
> </shortcut
> <guimenu
>Ficheiro</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
>Ficheiro</guimenu
> <guimenuitem
>Gravar</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Grava o documento</action
></para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>Q</keycap
></keycombo
> </shortcut
> <guimenu
>Ficheiro</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 giro, mas não o entendo. Para que é que serve?</para>
</question>
<answer>
<para
>O &kcachegrind; é útil numa fase posterior do desenvolvimento do 'software' que é a análise ('profiling'). Se você não programar aplicações, não precisa do &kcachegrind;. </para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para
>Eu obtenho erros de compilação; qual poderá ser o problema?</para>
</question>
<answer>
<para
>Normalmente, a sua instalação do &Qt; não contém o suporte do &kde;. </para>
</answer>
</qandaentry>
</qandaset>
</chapter>

<chapter id="credits">


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

<para
>&kappname; </para>
<para
>Obrigado ao Julian Seward pelo seu excelente &valgrind;, e ao Nicholas Nethercote pela adição do &cachegrind;. Sem estes programas, nem a actualização da árvore de chamadas, nem o &valgrind;, nem mesmo o  <application
>KCachegrind</application
> existiriam. Algumas das ideias para esta interface foram dadas por eles, também. </para>
<para
>E muito obrigado a todos os relatórios de erros e sugestões dos vários utilizadores. Por último, não desfazendo, obrigado a <itemizedlist>
<listitem
><para
>o &kde;, a maravilhosa plataforma de aplicações,</para>
</listitem>
<listitem
><para
>o &Qt;, a biblioteca gráfica perfeita</para>
</listitem>
<listitem
><para
>o &Linux;, o verdadeiro <acronym
>SO</acronym
></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; tem a sua página pessoal em <ulink url="http://www.weidendorfers.de/kcachegrind"
> http://www.weidendorfers.de/kcachegrind</ulink
>. Veja aqui mais instruções sobre a instalação e a compilação. </para>
</sect1>

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

<para
>Para poder usar com sucesso o &kcachegrind;, você precisa do &kde; 3.x. Para gerar os registos das análises, o &cachegrind; é necessário. Para permitir algumas das opções de visualização mais interessantes do &kcachegrind;, aplique a alteração da árvore de chamadas ao seu código da página do &kcachegrind; no 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 se encontram na janela de configuração ou nos menu 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:
-->













