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

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

<book lang="&language;">

<bookinfo>
<title
>:&kcachegrind;-håndbogen</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
>&kcachegrind; er en &kde;-grænseflade for &cachegrind;, en del af &valgrind;. </para>
</abstract>

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

</bookinfo>


<chapter id="introduction">
<title
>Indledning</title>

<para
>Når du udvikler et program, er et af de sidste skridt som regel at gøre det så hurtigt som muligt (men stadigvæk rigtigt). Du vil ikke sløse tiden væk på at optimere funktioner som sjældent bruges. Derfor skal du vide i hvilke dele af programmet den største del af tiden bruges. </para>

<para
>Dette kaldes profilering. Programmet køres under kontrol af et profileringsværktøj, som giver sporing af kørselen. Efter sporingen er undersøgt, véd du formodentlig hvor du skal optimere og bagefter verificerer du om optimeringen lykkedes med yderligere en profileringskørsel. </para>

<para
>Mest kendt er GCC's profileringsværktøj <application
>gprof</application
>. Du skal kompilere programmet med flaget <option
>-pg</option
>, køre programmet for at oprette filen <filename
>gmon.out</filename
>, som kan oversættes til læsbar form med <command
>gprof</command
>. Bagdelen er kompileringsskridtet for at forberede det kørbare program, som også skal linkes statisk. </para>

<para
>Et andet profileringsværktøj er &cachegrind;, som er en del af &valgrind;. Det bruger emuleringen af processoren i Valgrind til at køre programmet, og fanger alle hukommelsesadgange for sporingen. Programmet behøver ikke kompileres igen, det kan bruge delte biblioteker og plugin, og profileringsmålingen påvirker ikke resultatet af sporingen. Sporingen omfatter antallet af instruktioner, adgange til datahukommelsen og ikke ramt cache i første og andetniveaus cacher, og relaterer det til kildekodelinjer og funktioner i programmet som kører (en bagdel er at det bliver langsommere på grund af emuleringen af processoren, det er uheldigvis omkring 50 gange langsommere). </para>

<para
>En programfiks for kildekoden til &valgrind; 1.0.x tilføjer sporing af kaldetræet, dvs. hvordan funktionerne kalder hinanden og hvor mange begivenheder der sker mens en funktion køres (inklusive alle kaldte funktioner). </para>

<para
>&kappname; er et værktøj til at anskueliggøre profileringsdata som laves af &cachegrind;. Du anbefales stærkt at tilføje støtte for sporing af kaldetræ til &cachegrind;, eftersom &kcachegrind; på den måde bliver meget mere nyttig. </para>
</chapter>

<chapter id="using-kcachegrind">
<title
>Brug af &kcachegrind;</title>

<note>
<para
>Bemærk: Hver komponent i &kcachegrind; har <quote
>Hvad er dette?</quote
> hjælp. Hvis du ikke vil lede i dokumentationen, så brug den! </para>
</note>

<sect1>
<title
>Eksempel for at komme hurtigt i gang</title>


<para
>Kør det simpelthen!</para>
</sect1>

<sect1 id="features">
<title
>Funktioner i &kcachegrind;</title>

<para
>Understøtter: vilkårlige begivenheder, funktionsgruppering</para>
</sect1>

<sect1 id="guidelines">
<title
>Almene retningslinjer</title>

<para
>Effektiv profilering...</para>

</sect1>
<sect1 id="tutorial">
<title
>Øvelse</title>

<para
>En profileringssession med &kcachegrind;.</para>

</sect1>
</chapter>

<chapter id="commands">
<title
>Kommandoreference</title>

<sect1 id="kcachegrind-mainwindow">
<title
>&kcachegrind;s hovedvindue</title>
<para
></para>

<sect2>
<title
><guimenu
>Fil</guimenu
>-menuen</title>
<para>
<variablelist>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>N</keycap
></keycombo
> </shortcut
> <guimenu
>Fil</guimenu
> <guimenuitem
>Ny</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Opretter et nyt dokument</action
></para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>S</keycap
></keycombo
> </shortcut
> <guimenu
>Fil</guimenu
> <guimenuitem
>Gem</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Gemmer dokumentet</action
></para
></listitem>
</varlistentry>
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo
>&Ctrl;<keycap
>Q</keycap
></keycombo
> </shortcut
> <guimenu
>Fil</guimenu
> <guimenuitem
>Afslut</guimenuitem
> </menuchoice
></term>
<listitem
><para
><action
>Afslutter</action
> &kappname;</para
></listitem>
</varlistentry>
</variablelist>
</para>

</sect2>

</sect1>
</chapter>

<chapter id="faq">
<title
>Spørgsmål og svar</title>
&reporting.bugs; &updating.documentation; <qandaset id="faqlist">
<qandaentry>
<question>
<para
>&kcachegrind; virker ret lækker. Men jeg forstår den ikke. Hvad skal den bruges til?</para>
</question>
<answer>
<para
>&kcachegrind; er til hjælp på et sent skridt i programudvikling som kaldes profilering. Hvis du ikke udvikler programmer, har du ikke noget at bruge &kcachegrind; til. </para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para
>Jeg får kompileringsfejl. Hvad kan problemet være?</para>
</question>
<answer>
<para
>Ofte har &Qt;-installationen ikke understøttelse for &kde;... </para>
</answer>
</qandaentry>
</qandaset>
</chapter>

<chapter id="credits">


<title
>Medvirkende og licens</title>

<para
>&kappname; </para>
<para
>Tak til Julian Seward for det udmærkede værktøj &valgrind;, og Nicholas Nethercote for tilføjelsen &cachegrind;. Uden disse programmer, ville hverken programrettelser for kaldetræer for &valgrind; eller <application
>KCachegrind</application
> findes. Mange af ideerne til denne grafiske grænseflade kommer også fra dem. </para>
<para
>Og tak for alle fejlrapporter og forslag fra forskellige brugere. Sidst men ikke mindst, tak til <itemizedlist>
<listitem
><para
>&kde;, det vidunderlige programmeringsmiljø,</para>
</listitem>
<listitem
><para
>&Qt;, den perfekte værktøjskasse for grafiske brugergrænseflader,</para>
</listitem>
<listitem
><para
>&Linux;, det endegyldige operativsystem.</para>
</listitem>
</itemizedlist>
</para>
&underFDL; </chapter>

<appendix id="installation">
<title
>Installation</title>

<sect1 id="getting-kcachegrind">
<title
>Hvordan får jeg fat i &kcachegrind;</title>

<para
>&kcachegrind; har en hjemmeside på <ulink url="http://www.weidendorfers.de/kcachegrind"
>http://www.weidendorfers.de/kcachegrind</ulink
>. Kig der for at finde yderligere installations- og kompileringsinstruktioner. </para>
</sect1>

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

<para
>For at bruge &kcachegrind; med heldigt resultat, har du brug for &kde; 3.x. For at oprette profileringssporinger, kræves &cachegrind;. For at tillade de mest interessante valgmuligheder for anskueliggørelse i &kcachegrind;, skal programrettelsen for kaldetræet fra &kcachegrind;s hjemmeside anvendes på &valgrind;s kildekode. </para>
</sect1>

<sect1 id="compilation">
<title
>Kompilering og installation</title>
&install.compile.documentation; </sect1>

<sect1 id="configuration">
<title
>Indstilling</title>

<para
>Alle indstillingsmuligheder findes enten i indstillingsdialogen eller i de sammenhængsafhængige menuer i graferne. </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:
-->













