~ubuntu-branches/ubuntu/lucid/kde-l10n-sv/lucid

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2009-12-21 18:55:03 UTC
  • mfrom: (1.1.20 upstream)
  • Revision ID: james.westby@ubuntu.com-20091221185503-l07hf76scgqlcbfv
Tags: 4:4.3.85-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
  <!ENTITY oprofile "<application
19
19
>OProfile</application
20
20
>">
 
21
  <!ENTITY EBS "<acronym
 
22
>EBS</acronym
 
23
>">
 
24
  <!ENTITY TBS "<acronym
 
25
>TBS</acronym
 
26
>">
21
27
  <!ENTITY kappname "&kcachegrind;">
22
28
  <!ENTITY package "kdesdk">
23
29
  <!ENTITY % addindex "IGNORE">
24
30
  <!ENTITY % Swedish "INCLUDE">
25
31
]>
26
32
 
27
 
<!-- ................................................................ -->
28
 
 
29
33
<book lang="&language;">
30
34
 
31
35
<bookinfo>
44
48
>Josef.Weidendorfer@gmx.de</email
45
49
></address>
46
50
</affiliation>
 
51
<contrib
 
52
>Ursprunglig författare av dokumentationen</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
>Uppdateringar och rättningar</contrib>
47
68
</author>
48
69
 
49
70
<othercredit role="translator"
71
92
>&Josef.Weidendorfer;</holder
72
93
>       
73
94
</copyright>
 
95
<copyright>
 
96
<year
 
97
>2009</year>
 
98
<holder
 
99
>Federico Zenith</holder>
 
100
</copyright>
74
101
<legalnotice
75
102
>&FDLNotice;</legalnotice>
76
103
 
77
104
<date
78
 
>2004-07-27</date>
 
105
>2009-10-07</date>
79
106
<releaseinfo
80
 
>0.4.6</releaseinfo>
 
107
>0.5.1</releaseinfo>
81
108
 
82
109
<abstract>
83
110
<para
131
158
>För att exakt mäta tiden som går eller spela in händelser som inträffar under körning av ett kodavsnitt (t.ex. en funktion) krävs att ytterligare uppmätningskod infogas innan och efter det givna området. Den här koden läser tiden eller en global händelseräknare, och beräknar skillnader. Alltså måste originalkoden ändras innan körning. Det kallas instrumentering. Instrumentering kan göras av programmeraren själv, av kompilatorn eller av körningssystemet. Eftersom intressanta områden ofta är i flera nivåer, påverkar tiden som går åt för mätningen alltid mätresultatet. Därför måste instrumentering göras selektivt och resultaten måste tolkas noggrant. Detta gör förstås prestandaanalys med exakta mätningar till en mycket komplex process.</para>
132
159
 
133
160
<para
134
 
>Exakta mätningar är möjliga på grund av räknare i hårdvara (inklusive räknare som ökas när tiden tickar), som tillhandahålls i moderna processorer, och som ökas så fort en händelse inträffar. Eftersom vi vill tilldela händelser till kodavsnitt, skulle vi behöva hantera varje händelse genom att öka en räknare för det aktuella kodavsnittet själva, om inte räknarna fanns. Att göra detta i programvara är förstås inte möjligt. Men med antagandet att distributionen av händelser i källkoden är liknande om man bara tittar på var n:e händelse istället för varje, har en mätmetod som är justerbar med avseende på tiden som går åt för mätningen skapats. Den kallas sampling. Tidsbaserad sampling (TBS) använder tidmätning för att regelbundet titta på programräknaren för att skapa ett histogram av programmets kod. Händelsebaserad sampling (EBS) utnyttjar hårdvaruräknarna i moderna processorer, och använder ett läge där en avbrottshanterare anropas när en räknare går förbi nollvärdet, och skapar ett histogram av motsvarande händelsefördelning. I avbrottshanteraren initieras räknaren alltid om till n i samplingsmetoden. Fördelen med sampling är att koden inte behöver ändras, men det är fortfarande en kompromiss: antagandet ovan är riktigare om n är litet, men ju mindre n är, desto större är tiden som går åt i avbrottshanteraren.</para>
 
161
>Exakta mätningar är möjliga på grund av räknare i hårdvara (inklusive räknare som ökas när tiden tickar), som tillhandahålls i moderna processorer, och som ökas så fort en händelse inträffar. Eftersom vi vill tilldela händelser till kodavsnitt, skulle vi behöva hantera varje händelse genom att öka en räknare för det aktuella kodavsnittet själva, om inte räknarna fanns. Att göra detta i programvara är förstås inte möjligt. Men med antagandet att distributionen av händelser i källkoden är liknande om man bara tittar på var n:e händelse istället för varje, har en mätmetod som är justerbar med avseende på tiden som går åt för mätningen skapats. Den kallas sampling. Tidsbaserad sampling (TBS) använder tidmätning för att regelbundet titta på programräknaren för att skapa ett histogram av programmets kod. Händelsebaserad sampling (EBS) utnyttjar hårdvaruräknarna i moderna processorer, och använder ett läge där en avbrottshanterare anropas när en räknare går förbi nollvärdet, och skapar ett histogram av motsvarande händelsefördelning. I avbrottshanteraren initieras räknaren alltid om till <symbol
 
162
>n</symbol
 
163
> i samplingsmetoden. Fördelen med sampling är att koden inte behöver ändras, men det är fortfarande en kompromiss: antagandet ovan är riktigare om <symbol
 
164
>n</symbol
 
165
> är litet, men ju mindre <symbol
 
166
>n</symbol
 
167
> är, desto större är tiden som går åt i avbrottshanteraren.</para>
135
168
 
136
169
<para
137
170
>En annan mätmetod är att simulera det som händer i ett datorsystem när en given kod körs, dvs. körningsstyrd simulering. Simuleringen härleds alltid från en mer eller mindre noggrann modell av datorn. För mycket detaljerade modeller som är nära verkligheten, kan simuleringstiden dock vara oacceptabelt hög i praktiken. Fördelen med simulering är att godtyckligt komplex mätnings- och simuleringskod kan infogas i en given kod utan att störa resultaten. Att göra detta direkt innan körningen (vilket kallas instrumentering vid körning) med det ursprungliga binärprogrammet, är mycket bekvämt för användaren: Ingen omkompilering behövs. Simulering blir användbar om bara delar av en dator simulerats med en enkel modell. En annan fördel är att resultat som skapas av enkla modeller ofta är mycket enklare att förstå: problemet med riktig hårdvara är ofta att resultaten innehåller överlappande effekter från olika delar av datorn.</para>
156
189
>För exakt mätning av händelser som inträffar, finns det bibliotek med funktioner som kan läsa ut hårdvaruprestandaräknare. Mest välkänd är programfixen PerfCtr för &Linux;, och de arkitekturoberoende biblioteken PAPI och PCL. Exakta mätningar behöver ändå instrumentering av koden, som tidigare beskrivits. Antingen använder man biblioteken själv, eller automatiska instrumenteringssystem som ADAPTOR (för instrumentering av FORTRAN källkod) eller DynaProf (kodinjicering via DynInst).</para>
157
190
 
158
191
<para
159
 
>&oprofile; är ett systemprofileringsverktyg för &Linux; som använder sampling.</para>
 
192
>&oprofile; är ett systemprofileringsverktyg för &Linux; som använder sampling. </para>
160
193
 
161
194
<para
162
195
>I många avseenden är ett bekvämt sätt att utföra profilering att använda &cachegrind; eller &callgrind;, vilka är simulatorer som använder ramverket &valgrind; för instrumentering vid körning. Eftersom det inte finns något behov av att komma åt hårdvaruräknare (ofta svårt med dagens &Linux;-installationer), och binärprogram som ska profileras kan lämnas oförändrade, är det ett bra alternativt sätt jämfört med andra profileringsverktyg. Nackdelen med långsammare körning på grund av simuleringen kan reduceras genom att bara utföra simuleringen för intressanta programavsnitt, och kanske bara under några få iterationer av en snurra. Utan instrumentering för mätning och simulering leder &valgrind;s användning bara till en körning som är 3 till 5 gånger långsammare. Dessutom, om bara anropsdiagrammet och anropsantalen är intressanta, kan cachesimuleringen stängas av. </para>
163
196
 
164
197
<para
165
 
>Cachesimulering är det första steget i att approximera realtid, eftersom i moderna system är körtiden mycket känslig för hur så kallade cacher utnyttjas (små och snabba buffrar som snabbar upp upprepade åtkomster till samma celler i huvudminnet). &cachegrind; simulerar cacher genom att lagra minnesaccesser i cacherna. Den data som skapas omfattar antal åtkomster till instruktions- och dataminnet och cachemissar i första och andra nivåns cacher, och den relateras till källkodsrader och funktioner i programmet som kör. Genom att kombinera antal missar, och använda latenstider för missar för typiska processorer, kan en uppskattning av åtgången tid ges. </para>
 
198
>Cachesimulering är det första steget i att approximera realtid, eftersom i moderna system är körtiden mycket känslig för hur så kallade <emphasis
 
199
>cacher</emphasis
 
200
> utnyttjas (små och snabba buffrar som snabbar upp upprepade åtkomster till samma celler i huvudminnet). &cachegrind; simulerar cacher genom att lagra minnesaccesser i cacherna. Den data som skapas omfattar antal åtkomster till instruktions- och dataminnet och cachemissar i första och andra nivåns cacher, och den relateras till källkodsrader och funktioner i programmet som kör. Genom att kombinera antal missar, och använda latenstider för missar för typiska processorer, kan en uppskattning av åtgången tid ges. </para>
166
201
 
167
202
<para
168
203
>&callgrind; är en utökning av &cachegrind; som bygger upp anropsträdet för ett program i farten, dvs. hur funktionerna anropar varandra och hur många händelser som inträffar när en funktion körs. Dessutom kan den profileringsdata som måste samlas in delas upp enligt trådar och anropskedjans sammanhang. Det kan tillhandahålla profileringsdata på instruktionsnivå för att göra det möjligt att kommentera disassemblerad kod. </para>
214
249
>&callgrind;</title>
215
250
 
216
251
<para
217
 
>&callgrind; är en del av &valgrind;, <ulink url="http://valgrind.org"
218
 
>http://valgrind.org</ulink
 
252
>&callgrind; är en del av <ulink url="http://valgrind.org"
 
253
>&valgrind;</ulink
219
254
>. Observera att det tidigare kallades &calltree; men det namnet var missvisande. </para>
220
255
 
221
256
<para
222
 
>Den vanligaste användningen är att inleda kommandot för att starta ditt program med <application
223
 
>valgrind --tool=callgrind</application
224
 
>, som i <blockquote
 
257
>Den vanligaste användningen är att inleda kommandot för att starta ditt program med <userinput
 
258
><command
 
259
>valgrind</command
 
260
> <option
 
261
>--tool=callgrind</option
 
262
> </userinput
 
263
>, som med: <blockquote
225
264
><para
226
 
><command
227
 
>valgrind --tool=callgrind mitt_program mina_argument</command
 
265
><userinput
 
266
> <command
 
267
>valgrind</command
 
268
> <option
 
269
>--tool=callgrind</option
 
270
> <replaceable
 
271
>mitt_program</replaceable
 
272
> <replaceable
 
273
>mina_väljare</replaceable
 
274
> </userinput
228
275
></para
229
276
></blockquote
230
277
> När programmet avslutas skapas filen <filename
231
 
>callgrind.out.pid</filename
 
278
>callgrind.out.<replaceable
 
279
>pid</replaceable
 
280
></filename
232
281
>, som kan laddas i &kcachegrind;. </para>
233
282
 
234
283
<para
235
 
>Mer avancerad användning är att lagra profileringsdata så fort en given funktion i programmet anropas. För att t.ex. bara se profileringsdata när en webbsida ritas upp i <command
236
 
>konqueror</command
237
 
>, skulle du kunna bestämma att lagra data så fort du väljer menyalternativet Visa/Uppdatera. Det motsvarar ett anrop till <symbol
238
 
>KonqMainWindow::slotReload</symbol
 
284
>Mer avancerad användning är att lagra profileringsdata så fort en given funktion i programmet anropas. För att t.ex. bara se profileringsdata när en webbsida ritas upp i &konqueror;, skulle du kunna bestämma att lagra data så fort du väljer menyalternativet <menuchoice
 
285
><guimenu
 
286
>Visa</guimenu
 
287
><guimenuitem
 
288
>Uppdatera</guimenuitem
 
289
></menuchoice
 
290
>. Det motsvarar ett anrop till <methodname
 
291
>KonqMainWindow::slotReload</methodname
239
292
>. Använd <blockquote
240
293
><para
241
 
><command
242
 
>valgrind --tool=callgrind --dump-before=KonqMainWindow::slotReload konqueror </command
 
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
243
304
></para
244
305
></blockquote
245
306
> Det skapar flera profileringsdatafiler med ett ytterligare sekvensnummer i slutet på filnamnet. En fil utan ett sådant nummer (som bara slutar med process-id) skapas också. Genom att ladda den filen i &kcachegrind;, så laddas alla övriga också, och kan ses i översikten över delar och i listan med delar. </para>
252
313
 
253
314
<para
254
315
>&oprofile; är tillgänglig från <ulink url="http://oprofile.sf.net"
255
 
>http://oprofile.sf.net</ulink
 
316
>dess hemsida</ulink
256
317
>. Följ installeringsinstruktionerna på webbplatsen, men innan du gör det kontrollera om din distribution inte redan tillhandahåller det som ett paket (som &SuSE;). </para>
257
318
 
258
319
<para
259
320
>Profilering på systemnivå är bara tillåtet för systemadministratören, eftersom alla åtgärder i systemet kan observeras. Därför måste följande göras som systemadministratör. Anpassa först profileringsprocessen med det grafiska gränssnittet <command
260
321
>oprof_start</command
261
 
>, eller kommandoradverktyget opcontrol. Standardinställningen ska vara tidsläge (TBS, se inledningen). För att starta mätningen, kör <command
262
 
>opcontrol -s</command
263
 
>. Kör därefter programmet du är intresserad av, och skriv efteråt <command
264
 
>opcontrol -d</command
265
 
>. Det skriver ut mätresultaten i filer under katalogen <filename
 
322
>, eller kommandoradverktyget <command
 
323
>opcontrol</command
 
324
>. Standardinställningen ska vara tidsläge (TBS, se inledningen). För att starta mätningen, kör <userinput
 
325
><command
 
326
>opcontrol</command
 
327
> <option
 
328
>-s</option
 
329
></userinput
 
330
>. Kör därefter programmet du är intresserad av, och skriv efteråt <userinput
 
331
><command
 
332
>opcontrol</command
 
333
> <option
 
334
>-d</option
 
335
></userinput
 
336
>. Det skriver ut mätresultaten i filer under katalogen <filename class="directory"
266
337
>/var/lib/oprofile/samples/</filename
267
338
>. För att kunna visualisera data i &kcachegrind; gör följande i en tom katalog: <blockquote
268
339
><para
269
 
><command
270
 
>opreport -gdf | op2callgrind</command
 
340
><userinput
 
341
> <command
 
342
>opreport</command
 
343
> <option
 
344
>-gdf</option
 
345
> | <command
 
346
>op2callgrind</command
 
347
> </userinput
271
348
></para
272
349
></blockquote
273
350
> Det skapar många filer, en för varje program som kördes på systemet. Var och en kan laddas i &kcachegrind; för sig. </para>
284
361
><guimenu
285
362
>Arkiv</guimenu
286
363
> <guimenuitem
287
 
>Öppna...</guimenuitem
 
364
>Öppna</guimenuitem
288
365
></menuchoice
289
366
>, ser du en sidopanel som innehåller funktionslistan till vänster, och till höger huvudområdet för visualiseringar av den valda funktionen. Visualiseringsområdet kan ställas in godtyckligt för att visa flera visualiseringar samtidigt. </para>
290
367
 
291
368
<para
292
 
>Efter första starten, är området uppdelat i en övre och en undre del, var och en med olika visualiseringar som kan väljas med flikar. För att flytta visualiseringsvyer, använd flikarnas sammanhangsberoende meny, och justera avdelaren mellan visualiseringarna. För att snabbt byta mellan olika visualiseringslayouter, använd Visa/Layout/Duplicera, ändra layouten och byt mellan layouter med Visa/Layout/Nästa (eller ännu bättre, använd motsvarande snabbtangenter). </para>
 
369
>Efter första start är området uppdelad i en övre och undre del, var och en med olika vyer valbara via flikar. Använd flikarnas sammanhangsberoende menyer för att flytta vyer, och justera avdelarna mellan vyer. För att snabbt byta mellan olika layouter, använd <menuchoice
 
370
><shortcut
 
371
><keycombo action="simul"
 
372
>&Ctrl;<keycap
 
373
>→</keycap
 
374
> </keycombo
 
375
></shortcut
 
376
> <guimenu
 
377
>Visa</guimenu
 
378
><guisubmenu
 
379
>Layout</guisubmenu
 
380
> <guimenuitem
 
381
>Gå till nästa</guimenuitem
 
382
></menuchoice
 
383
> och <menuchoice
 
384
><shortcut
 
385
><keycombo action="simul"
 
386
>&Ctrl;<keycap
 
387
>←</keycap
 
388
> </keycombo
 
389
></shortcut
 
390
> <guimenu
 
391
>Visa</guimenu
 
392
><guisubmenu
 
393
>Layout</guisubmenu
 
394
> <guimenuitem
 
395
>Gå till föregående</guimenuitem
 
396
></menuchoice
 
397
>. </para>
293
398
 
294
399
<para
295
 
>Den aktiva händelsetypen är viktig för visualiseringarna: för &callgrind; är det till exempel cachemissar eller cykeluppskattningar, för &oprofile; är det "timer" i det enklaste fallet. Du kan ändra händelsetyp via en kombinationsruta i verktygsraden eller i händelsetypvyn. En första översikt över beteendet under körning bör ges när du väljer funktionen <symbol
296
 
>main</symbol
 
400
>Den aktiva händelsetypen är viktig för visualiseringarna: för &callgrind; är det till exempel cachemissar eller cykeluppskattningar, för &oprofile; är det <quote
 
401
>timer</quote
 
402
> i det enklaste fallet. Du kan ändra händelsetyp via en kombinationsruta i verktygsraden eller i vyn <guilabel
 
403
>Händelsetyp</guilabel
 
404
>. En första översikt över beteendet under körning bör ges när du väljer funktionen <function
 
405
>main</function
297
406
> i listan till vänster, och tittar på visualiseringen anropsdiagram. Där ser du anropen som sker i programmet. Observera att anropsdiagramvyn bara visar funktioner med ett högt händelseantal. Genom att dubbelklicka på en funktion i diagrammet ändras det så att anropade funktioner omkring den valda visas. </para>
298
407
 
299
408
<para
300
 
>För att utforska det grafiska gränssnittet ytterligare, förutom den här handboken, ta också en titt på dokumentationsavsnittet på webbsidan <ulink url="http://kcachegrind.sf.net"
301
 
>http://kcachegrind.sf.net</ulink
 
409
>För att utforska det grafiska gränssnittet ytterligare, förutom den här handboken, ta också en titt på dokumentationsavsnittet <ulink url="http://kcachegrind.sf.net"
 
410
>på webbsidan</ulink
302
411
>. Förutom detta, har varje grafisk komponent i &kcachegrind; hjälp via <quote
303
412
>Vad är det här?</quote
304
413
>. </para>
326
435
>Kostnadsantal för händelsetyper (som L2 missar) tilldelas till kostnadsenheter, som är objekt med förhållanden till källkod eller datastrukturer i ett givet program. Kostnadsenheter kan inte bara vara enkla kod- eller datapositioner, utan också sammansatta positioner. Ett anrop kan till exempel ha en källa och ett mål, eller en dataadress kan ha en datatyp och en kodposition där data har skapats. </para>
327
436
 
328
437
<para
329
 
>Kostnadsenheterna som &kcachegrind; känner till anges här. Enkla positioner: <itemizedlist
330
 
><listitem
331
 
><para
332
 
>Instruktion. En assemblerinstruktion på en given adress.</para
333
 
></listitem
334
 
><listitem
335
 
><para
336
 
>Källkodsrad i en funktion. Alla instruktioner som kompilatorn (via avlusningsinformation) avbildar på en given källkodsrad angiven med källkodsfilnamn och radnummer, och som körs i ett visst funktionssammanhang. Instruktioner utan en avbildning till en verklig källkodsrad använder radnummer 0 i filen "???".</para
337
 
></listitem
338
 
><listitem
339
 
><para
340
 
>Funktion. En given funktion består av alla källkodsrader i själva funktionen. En funktion anges av sitt namn och sin plats i ett visst binärobjekt om tillgängligt. Det senare behövs eftersom binärobjekt i ett enda program vart och ett kan innehålla funktioner med samma namn (de kan t. ex. kommas åt med dlopen/dlsym. Länkaren löser upp funktioner i en given sökordning för binärobjekt som används vid körning). Om ett profileringsverktyg inte kan detektera en funktions symbolnamn, t.ex. på grund av att avlusningsinformation inte är tillgänglig, används typiskt antingen adressen för den första instruktionen som körs, eller "???".</para
341
 
></listitem
342
 
><listitem
343
 
><para
344
 
>Binärobjekt. Alla funktioner vars kod är inne i ett givet binärobjekts område, antingen i det körbara huvudprogrammet eller ett delat bibliotek.</para
345
 
></listitem
346
 
><listitem
347
 
><para
348
 
>Källkodsfil. Alla funktioner vars första instruktion avbildas till en rad i den givna källkodsfilen.</para
349
 
></listitem
350
 
><listitem
351
 
><para
352
 
>Klass. Symbolnamn i funktioner är ofta ordnade i hierarkiska namnrymder, t.ex. C++ namnrymder, eller klasser i objektorienterade språk. Därför kan en klass själv innehålla funktioner i klassen eller inbäddade klasser.</para
353
 
></listitem
354
 
><listitem
355
 
><para
356
 
>Profileringsdel. Ett visst tidsavsnitt av en profileringskörning, med ett givet tråd-id, process-id och kommandorad som kördes.</para
357
 
></listitem
358
 
></itemizedlist
 
438
>Kostnadsenheterna som &kcachegrind; känner till anges här. Enkla positioner: <variablelist
 
439
><varlistentry
 
440
><term
 
441
>Instruktion</term
 
442
> <listitem
 
443
><para
 
444
>En assemblerinstruktion på en given adress.</para
 
445
></listitem
 
446
></varlistentry
 
447
> <varlistentry
 
448
><term
 
449
>Källkodsrad i en funktion</term
 
450
>  <listitem
 
451
><para
 
452
>Alla instruktioner som kompilatorn (via avlusningsinformation) avbildar på en given källkodsrad angiven med källkodsfilnamn och radnummer, och som körs i ett visst funktionssammanhang. Instruktioner utan en avbildning till en verklig källkodsrad använder radnummer 0 i filen <filename
 
453
>???</filename
 
454
>. </para
 
455
></listitem
 
456
> </varlistentry
 
457
> <varlistentry
 
458
><term
 
459
>Funktion</term
 
460
> <listitem
 
461
><para
 
462
>En given funktion består av alla källkodsrader i själva funktionen. En funktion anges av sitt namn och sin plats i ett visst binärobjekt om tillgängligt. Det senare behövs eftersom binärobjekt i ett enda program vart och ett kan innehålla funktioner med samma namn (de kan t.ex. kommas åt med <function
 
463
>dlopen</function
 
464
> eller <function
 
465
>dlsym</function
 
466
>. Länkaren löser upp funktioner i en given sökordning för binärobjekt som används vid körning). Om ett profileringsverktyg inte kan detektera en funktions symbolnamn, t.ex. på grund av att avlusningsinformation inte är tillgänglig, används typiskt antingen adressen för den första instruktionen som körs, eller <function
 
467
>???</function
 
468
>. </para
 
469
></listitem
 
470
> </varlistentry
 
471
> <varlistentry
 
472
> <term
 
473
>Binärobjekt</term
 
474
> <listitem
 
475
><para
 
476
> Alla funktioner vars kod är inne i ett givet binärobjekts område, antingen i det körbara huvudprogrammet eller ett delat bibliotek.</para
 
477
></listitem
 
478
> </varlistentry
 
479
> <varlistentry
 
480
> <term
 
481
>Källkodsfil</term
 
482
> <listitem
 
483
><para
 
484
>Alla funktioner vars första instruktion avbildas till en rad i den givna källkodsfilen.</para
 
485
> </listitem
 
486
></varlistentry
 
487
> <varlistentry
 
488
> <term
 
489
>Klass</term
 
490
> <listitem
 
491
><para
 
492
> Symbolnamn i funktioner är ofta ordnade i hierarkiska namnrymder, t.ex. C++ namnrymder, eller klasser i objektorienterade språk. Därför kan en klass själv innehålla funktioner i klassen eller inbäddade klasser.</para
 
493
></listitem
 
494
></varlistentry
 
495
> <varlistentry
 
496
> <term
 
497
>Profileringsdel</term
 
498
> <listitem
 
499
><para
 
500
>  Ett visst tidsavsnitt av en profileringskörning, med ett givet tråd-id, process-id och kommandorad som kördes.</para
 
501
></listitem
 
502
> </varlistentry
 
503
> </variablelist
359
504
> Som syns i listan, definierar en uppsättning kostnadsenheter ofta en annan kostnadsenhet. Därför finns det en hierarki med ingående kostnadsenheter, som bör vara uppenbar från beskrivningen ovan. </para>
360
505
 
361
506
<para
386
531
</sect2>
387
532
 
388
533
 
389
 
 
390
534
<sect2>
391
535
<title
392
536
>Händelsetyper</title>
411
555
></listitem
412
556
><listitem
413
557
><para
414
 
>funktionsgrupperingen (används i funktionsprofileringslistan och enhetsfärgningen),</para
 
558
>funktionsgrupperingen (används i listan <guilabel
 
559
>Funktionsprofilering</guilabel
 
560
> och enhetsfärgningen),</para
415
561
></listitem
416
562
><listitem
417
563
><para
427
573
></listitem
428
574
></itemizedlist
429
575
> Tillståndet påverkar visualiseringarna. </para>
 
576
 
430
577
<para
431
 
>Visualiseringar visas bara för en kostnadsenhet, den aktiva. Om en given visualisering inte är lämplig för en kostnadsenhet, inaktiveras den (t.ex. om ett &ELF;-objekt väljs i grupplistan genom att dubbelklicka, eftersom källkodskommentarer för ett &ELF;-objekt inte är vettiga). </para>
 
578
>Visualiseringar visas bara för en kostnadsenhet, den aktiva. Om en given visualisering inte är lämplig för en kostnadsenhet, inaktiveras den: om t.ex. ett &ELF;-objekt väljes i grupplistan, är inte källkodskommentarer vettiga. </para>
 
579
 
432
580
<para
433
581
>För en aktiv funktion visar till exempel listan över de som blir anropade alla funktioner som anropas från den aktiva funktionen. Man kan välja en av funktionerna utan att göra den aktiv. Om anropsdiagrammet dessutom visas intill, väljes automatiskt samma funktion där. </para>
434
582
 
445
593
>Sidopaneler är sidofönster som kan placeras vid vilken kant som helst i ett fönster i &kcachegrind;. De innehåller alltid en lista med kostnadsenheter sorterade på något sätt. <itemizedlist>
446
594
<listitem
447
595
><para
448
 
>Funktionsprofilering. Funktionsprofileringen är en lista med funktioner som visar kostnaden som uppstår i och utanför funktionen, namn och funktionens position. </para
449
 
></listitem>
450
 
<listitem
451
 
><para
452
 
>Översikt över delar </para
453
 
></listitem>
454
 
<listitem
455
 
><para
456
 
>Anropsstack </para
 
596
><guilabel
 
597
>Funktionsprofilering</guilabel
 
598
> är en lista med funktioner som visar kostnaden som uppstår i och utanför funktionen, namn och funktionens position. </para
 
599
></listitem>
 
600
<listitem
 
601
><para>
 
602
<guilabel
 
603
>Översikt över delar</guilabel>
 
604
</para
 
605
></listitem>
 
606
<listitem
 
607
><para>
 
608
<guilabel
 
609
>Anropsstack</guilabel>
 
610
</para
457
611
></listitem>
458
612
</itemizedlist>
459
613
</para>
461
615
 
462
616
<sect2>
463
617
<title
464
 
>Visualiseringsområde</title>
465
 
<para
466
 
>Visualiseringsområdet, typiskt den högra delen av ett huvudfönster i &kcachegrind;, består av en (förvalt värde) eller flera flikvyer, antingen uppradade horisontellt eller vertikalt. Varje flikvy innehåller olika visualiseringsvyer av en enda kostnadsenhet åt gången. Namnet på enheten visas längst upp i flikvyn. Om det finns flera flikvyer, är bara en aktiv. Enhetsnamnet i den aktiva flikvyn visas med fetstil, och avgör den aktiva kostnadsenheten i &kcachegrind;s fönster. </para>
467
 
</sect2>
468
 
 
469
 
<sect2>
470
 
<title
471
 
>Områden i en flikvy</title>
472
 
<para
473
 
>Varje flikvy kan innehålla upp till fyra visningsområden, närmare bestämt uppe, höger, vänster och nere. Varje område kan innehålla flera visualiseringsvyer ovanpå varandra. Den synliga delen av ett område väljes med en flikrad. Flikrader för det övre och högra området är längst upp, flikrader för det vänstra och nedre området är längst ner. Du kan ange vilka sorters visualiseringar som ska hamna i de olika områdena genom att använda flikarnas sammanhangsberoende menyer. </para>
474
 
</sect2>
475
 
 
476
 
<sect2>
477
 
<title
478
 
>Synkroniserad visualisering via vald enhet i en flikvy</title>
479
 
<para
480
 
>Förutom en aktiv enhet, har varje flikvy en vald enhet. Eftersom de flesta visualiseringstyper visar flera enheter med den aktiva centrerad på något sätt, kan du ändra valt objekt genom att navigera i en visualisering (genom att klicka med musen eller använda tangentbordet). Ofta visas valda objekt med markeringar. Genom att ändra vald enhet i en av visualiseringarna i flikvyn, markeras den nyvalda enheten i alla andra visualiseringar i flikvyn på motsvarande sätt. </para>
481
 
</sect2>
482
 
 
483
 
<sect2>
484
 
<title
485
 
>Synkronisering mellan flikvyer</title>
486
 
<para
487
 
>Om det finns flera flikvyer, gör en ändring av markeringen i en flikvy att en aktivering ändras i nästa flikvy (till höger eller nedanför). Den här sortens länkning bör till exempel möjliggöra snabb bläddring i anropsdiagram. </para>
 
618
>Visualiseringsområdet</title>
 
619
<para
 
620
>Visualiseringsområdet, typiskt den högra delen av ett huvudfönster i &kcachegrind;, består av en (förvalt värde) eller flera flikar, antingen uppradade horisontellt eller vertikalt. Varje flik innehåller olika visualiseringar av en enda kostnadsenhet åt gången. Namnet på enheten visas längst upp i fliken. Om det finns flera flikar, är bara en aktiv. Enhetsnamnet i den aktiva fliken visas med fetstil, och avgör den aktiva kostnadsenheten i &kcachegrind;s fönster. </para>
 
621
</sect2>
 
622
 
 
623
<sect2>
 
624
<title
 
625
>Områden under en flik</title>
 
626
<para
 
627
>Varje flik kan innehålla upp till fyra visningsområden, närmare bestämt uppe, höger, vänster och nere. Varje område kan innehålla flera visualiseringar ovanpå varandra. Den synliga delen av ett område väljes med en flikrad. Flikrader för det övre och högra området är längst upp, flikrader för det vänstra och nedre området är längst ner. Du kan ange vilka sorters visualiseringar som ska hamna i de olika områdena genom att använda flikarnas sammanhangsberoende menyer. </para>
 
628
</sect2>
 
629
 
 
630
<sect2>
 
631
<title
 
632
>Synkroniserad vy med vald enhet under en flik</title>
 
633
<para
 
634
>Förutom en aktiv enhet, har varje flik en vald enhet. Eftersom de flesta visualiseringstyper visar flera enheter med den aktiva centrerad på något sätt, kan du ändra valt objekt genom att navigera i en visualisering (genom att klicka med musen eller använda tangentbordet). Ofta visas valda objekt med markeringar. Genom att ändra vald enhet i en av visualiseringarna under fliken, markeras den nyvalda enheten i alla andra visualiseringar under fliken på motsvarande sätt. </para>
 
635
</sect2>
 
636
 
 
637
<sect2>
 
638
<title
 
639
>Synkronisering mellan flikar</title>
 
640
<para
 
641
>Om det finns flera flikar, gör en ändring av markeringen under en flik att en aktivering ändras under nästa flik (till höger eller nedanför). Den här sortens länkning bör till exempel möjliggöra snabb bläddring i anropsdiagram. </para>
488
642
</sect2>
489
643
 
490
644
<sect2>
491
645
<title
492
646
>Layouter</title>
493
647
<para
494
 
>Layouten för alla flikvyerna i ett fönster kan sparas (se menyalternativet Visa/Layout). Efter nuvarande layout har duplicerats (Ctrl+Plus eller meny) och någon storlek har ändrats eller en visualiseringsvy har flyttats till ett annat område i en flikvy, kan du snabbt byta mellan den gamla och den nya layouten via Ctrl+Vänsterpil eller Ctrl+Högerpil. Layoutuppsättningarna sparas mellan sessioner i &kcachegrind; med samma profileringskommando. Du kan göra den nuvarande layoutuppsättningen standard för nya sessioner i &kcachegrind;, eller återställa standarduppsättningen. </para>
 
648
>Layouten för alla flikarna i ett fönster kan sparas (<menuchoice
 
649
><guimenu
 
650
>Visa</guimenu
 
651
><guisubmenu
 
652
>Layout</guisubmenu
 
653
></menuchoice
 
654
>). Efter nuvarande layout har duplicerats (<menuchoice
 
655
><shortcut
 
656
><keycombo action="simul"
 
657
>&Ctrl; <keycap
 
658
>+</keycap
 
659
></keycombo
 
660
></shortcut
 
661
> <guimenu
 
662
>Visa</guimenu
 
663
> <guisubmenu
 
664
>Layout</guisubmenu
 
665
><guimenuitem
 
666
>Duplicera</guimenuitem
 
667
></menuchoice
 
668
>) och någon storlek har ändrats eller en visualisering har flyttats till ett annat område under en flik, kan du snabbt byta mellan den gamla och den nya layouten via <keycombo action="simul"
 
669
>&Ctrl; <keycap
 
670
>Vänsterpil</keycap
 
671
></keycombo
 
672
> eller <keycombo action="simul"
 
673
>&Ctrl; <keycap
 
674
>Högerpil</keycap
 
675
></keycombo
 
676
>. Layoutuppsättningarna sparas mellan sessioner i &kcachegrind; med samma profileringskommando. Du kan göra den nuvarande layoutuppsättningen standard för nya sessioner i &kcachegrind;, eller återställa standarduppsättningen. </para>
495
677
</sect2>
496
678
</sect1>
497
679
 
505
687
<para
506
688
>Den flata profilen innehåller en grupp- och en funktionsvalslista. Grupplistan innehåller alla grupper där kostnader uppstår, beroende på markerad grupptyp. Grupplistan döljs när gruppering stängs av. </para>
507
689
<para
508
 
>Funktionslistan innehåller funktionerna i den valda gruppen (eller alla funktioner om gruppering är avstängd), ordnade enligt någon kolumn, t.ex. ingående kostnad eller använd egenkostnad. Det finns ett maximalt antal funktioner som visas i listan, vilket kan ställas in med Inställningar -> Anpassa &kcachegrind;. </para>
 
690
>Funktionslistan innehåller funktionerna i den valda gruppen (eller alla funktioner om gruppering är avstängd), ordnade enligt någon kolumn, t.ex. ingående kostnad eller använd egenkostnad. Det finns ett maximalt antal funktioner som visas i listan, vilket kan ställas in med <menuchoice
 
691
><guimenu
 
692
>Inställningar</guimenu
 
693
><guimenuitem
 
694
>Anpassa KCachegrind</guimenuitem
 
695
></menuchoice
 
696
>. </para>
509
697
</sect2>
510
698
 
511
699
<sect2>
512
700
<title
513
701
>Översikt över delar</title>
514
702
<para
515
 
>Under en profileringskörning kan flera profileringsdatafiler skapas, som kan laddas tillsammans i &kcachegrind;. Sidorutan översikt över delar visar dem, horisontellt ordnade enligt tiden de skapades. Storleken på rektanglarna är proportionell mot kostnaden som uppstått i delarna. Du kan välja en eller flera delar för att begränsa kostnaderna som visas i övriga vyer i &kcachegrind; till bara dessa delar. </para>
 
703
>Under en profileringskörning kan flera profileringsdatafiler skapas, som kan laddas tillsammans i &kcachegrind;. Sidorutan <guilabel
 
704
>Översikt över delar</guilabel
 
705
> visar dem, horisontellt ordnade enligt tiden de skapades. Storleken på rektanglarna är proportionell mot kostnaden som uppstått i delarna. Du kan välja en eller flera delar för att begränsa kostnaderna som visas i övriga vyer i &kcachegrind; till bara dessa delar. </para>
516
706
<para
517
 
>Delarna är ytterligare uppdelade: Det finns ett uppdelningsläge och ett samlat delningsläge: <itemizedlist>
518
 
<listitem
519
 
><para
520
 
>Uppdelning: Du ser en uppdelning i grupper för en spårningsdel, enligt vald grupptyp. Om till exempel &ELF;-objektgrupper är valt, ser du färgade rektanglar för varje använt &ELF;-objekt (delat bibliotek eller körbart program), med storlek enligt ingående kostnad. </para
521
 
></listitem>
522
 
<listitem
523
 
><para
524
 
>Samlad delning: En rektangel som visar samlad kostnad för aktuell markerad funktion i spårningsdelen visas. Den delas återigen upp, för att visa samlade kostnader för anropade funktioner. </para
525
 
></listitem>
526
 
</itemizedlist>
 
707
>Delarna är ytterligare uppdelade mellan ett uppdelningsläge och ett samlat delningsläge med kostnad: <variablelist>
 
708
<varlistentry>
 
709
<term
 
710
><guilabel
 
711
>Uppdelningsläge</guilabel
 
712
></term>
 
713
<listitem
 
714
><para
 
715
>Uppdelningen visas i grupper för en spårningsdatadel, enligt vald grupptyp. Om till exempel &ELF;-objektgrupper är valt, ser du färgade rektanglar för varje använt &ELF;-objekt (delat bibliotek eller körbart program), med storlek enligt ingående kostnad. </para
 
716
></listitem>
 
717
</varlistentry>
 
718
<varlistentry>
 
719
<term
 
720
><guilabel
 
721
>Diagramläge</guilabel
 
722
></term>
 
723
<listitem
 
724
><para
 
725
>En rektangel som visar samlad kostnad för aktuell markerad funktion i delen visas. Den delas återigen upp, för att visa samlade kostnader för anropade funktioner. </para
 
726
></listitem>
 
727
</varlistentry>
 
728
</variablelist>
527
729
</para>
528
730
</sect2>
529
731
 
531
733
<title
532
734
>Anropsstack</title>
533
735
<para
534
 
>Det här är en rent uppdiktad 'mest trolig' anropsstack. Den byggs upp genom att börja med aktuell markerad funktion och lägga till de som anropar och anropade med högst kostnad längst upp och längst ner. </para>
 
736
>Det här är en rent uppdiktad <quote
 
737
>mest trolig</quote
 
738
> anropsstack. Den byggs upp genom att börja med aktuell markerad funktion och lägga till de som anropar och anropade med högst kostnad längst upp och längst ner. </para>
535
739
<para
536
 
>Kolumnerna 'Kostnad' och 'Anrop' visar kostnad som behövs för alla anrop från funktionen på raden ovan. </para>
 
740
>Kolumnerna <guilabel
 
741
>Kostnad</guilabel
 
742
> och <guilabel
 
743
>Anrop</guilabel
 
744
> visar kostnad som behövs för alla anrop från funktionen på raden ovan. </para>
537
745
</sect2>
538
746
</sect1>
539
747
 
540
 
<sect1 id="concepts-visualizations">
 
748
<sect1 id="concepts-views">
541
749
<title
542
 
>Visualiseringar</title>
 
750
>Vyer</title>
543
751
 
544
752
<sect2>
545
753
<title
546
 
>Händelsetyper</title>
 
754
>Händelsetyp</title>
547
755
<para
548
 
>Det här listan visar alla tillgängliga kostnadsslag och vad som är egenkostnaden och samlade kostnaden för aktuell markerad funktion för kostnadsslagen. </para>
 
756
>Listan <guilabel
 
757
>Händelsetyp</guilabel
 
758
> visar alla tillgängliga kostnadsslag och vad som är egenkostnaden och samlade kostnaden för aktuell markerad funktion för kostnadsslagen. </para>
549
759
<para
550
760
>Genom att välja en kostnadsslag i listan, ändrar du kostnadsslag för kostnader som visas överallt i &kcachegrind; till det valda. </para>
551
761
</sect2>
554
764
<title
555
765
>Anropslistor</title>
556
766
<para
557
 
>Listorna visar anrop till/från den nuvarande aktiva funktionen. Med 'alla' de som anropar och 'alla' anropade, menas funktioner som kan nås i båda riktningarna, även om andra funktioner finns emellan. </para>
 
767
>Listorna visar anrop till och från den nuvarande aktiva funktionen. Med <guilabel
 
768
>Alla de som anropar</guilabel
 
769
> och <guilabel
 
770
>Alla anropade</guilabel
 
771
>, menas funktioner som kan nås i båda riktningarna, även om andra funktioner finns emellan. </para>
 
772
 
558
773
<para
559
774
>Anropslistans vy omfattar: <itemizedlist>
560
775
<listitem
561
776
><para
562
 
>De som direkt anropar </para
563
 
></listitem>
564
 
<listitem
565
 
><para
566
 
>Direkta anrop </para
567
 
></listitem>
568
 
<listitem
569
 
><para
570
 
>Alla som anropar </para
571
 
></listitem>
572
 
<listitem
573
 
><para
574
 
>Alla som anropas </para
 
777
>De som anropar direkt</para
 
778
></listitem>
 
779
<listitem
 
780
><para
 
781
>De som blir anropade direkt</para
 
782
></listitem>
 
783
<listitem
 
784
><para
 
785
><guilabel
 
786
>Alla som anropar</guilabel
 
787
></para
 
788
></listitem>
 
789
<listitem
 
790
><para
 
791
><guilabel
 
792
>Alla som anropas</guilabel
 
793
></para
575
794
></listitem>
576
795
</itemizedlist>
577
796
</para>
581
800
<title
582
801
>Mappningar</title>
583
802
<para
584
 
>En visualisering med träddiagram av den primära händelsetypen, uppåt eller neråt i anropshierarkin. Varje färglagd rektangel motsvarar en funktion. Storleken försöker vara proportionell mot kostnaden som uppstår i den, medan den aktiva funktionen kör (det finns dock begränsningar i uppritningen). </para>
 
803
>En visualisering med träddiagram av den primära händelsetypen, uppåt eller neråt i anropshierarkin. Varje färglagd rektangel motsvarar en funktion. Storleken är ungefär proportionell mot kostnaden som uppstår i den, medan den aktiva funktionen kör (det finns dock begränsningar i återgivningen). </para>
585
804
<para
586
805
>För kartan över de som anropar, visar diagrammet hierarkin i flera nivåer för alla de som anropar den aktuella aktiverade funktionen. För kartan över de som blir anropade visar det hierarkin i flera nivåer för alla de som blir anropade av den aktuella aktiverade funktionen. </para>
587
806
<para
588
 
>Utseendealternativ hittas i den sammanhangsberoende menyn. För att få exakta storleksförhållanden, välj 'Bara riktiga kanter'. Eftersom läget kan ta mycket lång tid, kanske du först vill begränsa maximalt antal uppritade nivåer. 'Bäst' avgör delningsriktningen för inre funktioner från den yttres proportion. 'Alltid bäst' beslutar om återstående utrymme för varje funktion på samma nivå. 'Ignorera proportioner' tar utrymme för att rita funktionsnamnet innan inre funktioner ritas. Observera att storleksförhållanden kan bli väsentligt felaktiga. </para>
 
807
>Utseendealternativ hittas i den sammanhangsberoende menyn. För att få exakta storleksförhållanden, välj <guimenuitem
 
808
>Bara riktiga kanter</guimenuitem
 
809
>. Eftersom läget kan ta mycket lång tid, kanske du först vill begränsa maximalt antal återgivna nivåer. <guilabel
 
810
>Bäst</guilabel
 
811
> avgör delningsriktningen för inre funktioner från den yttres proportion. <guilabel
 
812
>Alltid bäst</guilabel
 
813
> beslutar om återstående utrymme för varje funktion på samma nivå. <guilabel
 
814
>Ignorera proportioner</guilabel
 
815
> tar utrymme för att rita funktionsnamnet innan inre funktioner ritas. Observera att storleksförhållanden kan bli väsentligt felaktiga. </para>
589
816
<para
590
 
>Tangentbordsnavigering är tillgänglig med vänster/höger piltangenter för att gå igenom objekt på samma nivå, och uppåt/neråt piltangenter för att gå upp eller ner en nivå, Returtangenten aktiverar aktuellt objekt. </para>
 
817
>Tangentbordsnavigering är tillgänglig med vänster och höger piltangenter för att gå igenom objekt på samma nivå, och uppåt/neråt piltangenter för att gå upp eller ner en nivå, Returtangenten aktiverar aktuellt objekt. </para>
591
818
</sect2>
592
819
 
593
820
<sect2>
594
821
<title
595
822
>Anropsdiagram</title>
596
823
<para
597
 
>Den här vyn visar omgivningen till anropsdiagrammet för den aktiva funktionen. Kostnaden som visas är bara kostnaden som uppstår när den aktiva funktionen verkligen körde, dvs. kostnaden som visas för main(), om det syns, ska vara samma som kostanden för den aktiva funktionen, eftersom det är den del av den tillhörande kostnaden som uppstår i main() medan den aktiva funktionen kör. </para>
 
824
>Den här vyn visar omgivningen till anropsdiagrammet för den aktiva funktionen. Kostnaden som visas är bara kostnaden som uppstår när den aktiva funktionen verkligen körde, dvs. kostnaden som visas för <function
 
825
>main()</function
 
826
>, om det syns, ska vara samma som kostanden för den aktiva funktionen, eftersom det är den del av den tillhörande kostnaden som uppstår i <function
 
827
>main()</function
 
828
> medan den aktiva funktionen kör. </para>
598
829
<para
599
 
>För cykler, anger blåa anropspilar att det här är ett artificiellt anrop som lagts till för att riktig uppritning, som i själva verket aldrig inträffat. </para>
 
830
>För cykler, anger blåa anropspilar att det här är ett artificiellt anrop som lagts till för riktig uppritning, som i själva verket aldrig inträffat. </para>
600
831
<para
601
832
>Om diagrammet är större än komponentens yta, visas en översiktsruta i ena hörnet. Det finns liknande visualiseringsalternativ som i anropsträdkartan. Den valda funktionen markeras. </para>
602
833
</sect2>
605
836
<title
606
837
>Kommentarer</title>
607
838
<para
608
 
>Listan över assemblerkod med kommentarer visar maskinkodsinstruktionerna för aktuell markerad funktion tillsammans med (egen)kostnaden som uppstår när en instruktion utförs. Om det är en anropsinstruktion, infogas rader med information om anropet som sker i koden: Detta är den samlade kostnaden som uppstår inne i anropet, antal anrop som sker, och anropsmålet. </para>
 
839
>Den kommenterade källkoden eller assemblerlistan visar källkodsraderna eller maskinkodsinstruktionerna för aktuell markerad funktion tillsammans med (egen)kostnaden som uppstår när en källkodsrad eller instruktion utförs. Om det är en anropsinstruktion, infogas rader med information om anropet som sker i koden: Detta är den samlade kostnaden som uppstår inne i anropet, antal anrop som sker, och anropsmålet. </para>
609
840
<para
610
841
>Markera en sådan rad med anropsinformation för att aktivera anropsmålet. </para>
611
842
</sect2>
641
872
> </shortcut
642
873
> <guimenu
643
874
>Arkiv</guimenu
644
 
> <guimenuitem
 
875
><guimenuitem
645
876
>Ny</guimenuitem
646
877
> </menuchoice
647
878
></term>
648
879
<listitem
649
880
><para
650
881
><action
651
 
>Öppnar ett tomt toppnivåfönster där du kan ladda profileringsdata.</action
652
 
> Det här alternativet behövs egentligen inte, eftersom <menuchoice
 
882
>Öppnar ett tomt toppnivåfönster</action
 
883
> där du kan ladda profileringsdata. Det här alternativet behövs egentligen inte, eftersom <menuchoice
653
884
><guimenu
654
885
>Arkiv</guimenu
655
886
> <guimenuitem
670
901
> </shortcut
671
902
> <guimenu
672
903
>Arkiv</guimenu
673
 
> <guimenuitem
 
904
><guimenuitem
674
905
>Öppna</guimenuitem
675
906
> </menuchoice
676
907
></term>
677
 
<listitem
678
 
><para
 
908
<listitem>
 
909
<para
679
910
><action
680
 
>Visar fildialogrutan för att välja en profileringsdatafil som ska laddas.</action
681
 
> Om någon data redan visas i det nuvarande toppnivåfönstret, öppnar detta ett nytt fönster. Om du vill lägga till ytterligare profileringsdata i nuvarande fönster, använd <menuchoice
 
911
>Visar &kde;:s fildialogruta</action
 
912
> för att välja en profileringsdatafil som ska läsas in. Om någon data redan visas i det nuvarande toppnivåfönstret, öppnar detta ett nytt fönster. Om du vill lägga till ytterligare profileringsdata i nuvarande fönster, använd <menuchoice
682
913
><guimenu
683
914
>Arkiv</guimenu
684
915
> <guimenuitem
685
 
>Lägg till...</guimenuitem
 
916
>Lägg till</guimenuitem
686
917
></menuchoice
687
918
>. </para>
688
919
<para
689
 
>Profileringsdatafilernas namn slutar oftast med '.pid.part-threadID', där 'part' och 'threadID' är valfritt och 'part' används av flera profileringsdatafiler som tillhör en programkörning. Genom att ladda en fil som bara slutar med '.pid', laddas också eventuella befintliga datafiler, men med andra filändelser, för den här körningen. </para>
690
 
<para
691
 
>Till exempel om profileringsdatafilerna cachegrind.out.123 och cachegrind.out.123.1 finns, laddas också den andra automatiskt genom att ladda den första. </para
 
920
>Profileringsdatafilernas namn slutar oftast med <literal role="extension"
 
921
>.<replaceable
 
922
>pid</replaceable
 
923
>.<replaceable
 
924
>part</replaceable
 
925
>-<replaceable
 
926
>threadID</replaceable
 
927
></literal
 
928
>, där <replaceable
 
929
>part</replaceable
 
930
> och <replaceable
 
931
>threadID</replaceable
 
932
> är valfria. <replaceable
 
933
>pid</replaceable
 
934
> och <replaceable
 
935
>part</replaceable
 
936
> används av flera profileringsdatafiler som tillhör en programkörning. Genom att ladda en fil som bara slutar med <literal role="extension"
 
937
><replaceable
 
938
>pid</replaceable
 
939
></literal
 
940
>, laddas också eventuella befintliga datafiler, men med andra filändelser, för den här körningen. </para>
 
941
<informalexample
 
942
><para
 
943
>Om profileringsdatafilerna <filename
 
944
>cachegrind.out.123</filename
 
945
> och <filename
 
946
>cachegrind.out.123.1</filename
 
947
> finns, laddas också den andra automatiskt genom att ladda den första. </para
 
948
></informalexample
692
949
></listitem>
693
950
</varlistentry>
694
951
 
698
955
><guimenu
699
956
>Arkiv</guimenu
700
957
> <guimenuitem
701
 
>Lägg till...</guimenuitem
 
958
>Lägg till</guimenuitem
702
959
> </menuchoice
703
960
></term>
704
961
<listitem
705
962
><para
706
963
><action
707
 
>Lägger till en profileringsdatafil i nuvarande fönster.</action
708
 
> Genom att använda det kan du tvinga fram att flera datafiler laddas i samma toppnivåfönster även om de inte kommer från samma körning givet av konventionen för namngivning av profileringsdatafiler. Det kan till exempel användas för jämförelser. </para
 
964
>Lägger till en profileringsdatafil</action
 
965
> i nuvarande fönster. Genom att använda det kan du tvinga fram att flera datafiler laddas i samma toppnivåfönster även om de inte kommer från samma körning givet av konventionen för namngivning av profileringsdatafiler. Det kan till exempel användas för jämförelser. </para
709
966
></listitem>
710
967
</varlistentry>
711
968
 
712
969
<varlistentry>
713
970
<term
714
971
><menuchoice
715
 
><guimenu
 
972
><shortcut
 
973
> <keycombo
 
974
><keycap
 
975
>F5</keycap
 
976
></keycombo
 
977
> </shortcut
 
978
> <guimenu
716
979
>Arkiv</guimenu
717
 
> <guimenuitem
 
980
><guimenuitem
718
981
>Uppdatera</guimenuitem
719
982
> </menuchoice
720
983
></term>
737
1000
> </shortcut
738
1001
> <guimenu
739
1002
>Arkiv</guimenu
740
 
> <guimenuitem
 
1003
><guimenuitem
741
1004
>Avsluta</guimenuitem
742
1005
> </menuchoice
743
1006
></term>
753
1016
 
754
1017
</sect2>
755
1018
 
756
 
<sect2>
757
 
<title
758
 
>Menyn <guimenu
759
 
>Visa</guimenu
760
 
></title>
761
 
<para>
762
 
<variablelist>
763
 
 
764
 
<varlistentry>
765
 
<term
766
 
><menuchoice
767
 
><guimenu
768
 
>Visa</guimenu
769
 
> <guimenuitem
770
 
>Primär händelsetyp</guimenuitem
771
 
> </menuchoice
772
 
></term>
773
 
<listitem
774
 
><para
775
 
><action
776
 
>(Att göra)</action
777
 
></para
778
 
></listitem>
779
 
</varlistentry>
780
 
 
781
 
<varlistentry>
782
 
<term
783
 
><menuchoice
784
 
><guimenu
785
 
>Visa</guimenu
786
 
> <guimenuitem
787
 
>Sekundär händelsetyp</guimenuitem
788
 
> </menuchoice
789
 
></term>
790
 
<listitem
791
 
><para
792
 
><action
793
 
>(Att göra)</action
794
 
></para
795
 
></listitem>
796
 
</varlistentry>
797
 
 
798
 
<varlistentry>
799
 
<term
800
 
><menuchoice
801
 
><guimenu
802
 
>Visa</guimenu
803
 
> <guimenuitem
804
 
>Gruppering</guimenuitem
805
 
> </menuchoice
806
 
></term>
807
 
<listitem
808
 
><para
809
 
><action
810
 
>(Att göra)</action
811
 
></para
812
 
></listitem>
813
 
</varlistentry>
814
 
 
815
 
<varlistentry>
816
 
<term
817
 
><menuchoice
818
 
><guimenu
819
 
>Visa</guimenu
820
 
> <guimenuitem
821
 
>Layout</guimenuitem
822
 
> </menuchoice
823
 
></term>
824
 
<listitem
825
 
><para
826
 
><action
827
 
>(Att göra)</action
828
 
></para
829
 
></listitem>
830
 
</varlistentry>
831
 
 
832
 
<varlistentry>
833
 
<term
834
 
><menuchoice
835
 
><guimenu
836
 
>Visa</guimenu
837
 
> <guimenuitem
838
 
>Dela</guimenuitem
839
 
> </menuchoice
840
 
></term>
841
 
<listitem
842
 
><para
843
 
><action
844
 
>(Att göra)</action
845
 
></para
846
 
></listitem>
847
 
</varlistentry>
848
 
 
849
 
</variablelist>
850
 
</para>
851
 
 
852
 
</sect2>
853
 
 
854
 
 
855
1019
</sect1>
856
1020
</chapter>
857
1021
 
875
1039
<qandaentry>
876
1040
<question>
877
1041
<para
878
 
>Vad är skillnaden mellan 'Inkl.' och 'Själv'? </para>
879
 
</question>
880
 
<answer>
881
 
<para
882
 
>De är kostnadsegenskaper för funktioner med avseende på en viss händelsetyp. Eftersom funktioner kan anropa varandra, är det rimligt att skilja på funktionens egen kostnad ('Själv') och den samlade kostnaden inklusive alla anropade funktioner ('Inkl.'). 'Själv' kallas också ibland egenkostnad. </para>
883
 
<para
884
 
>Alltså kommer du till exempel alltid att ha en samlad kostnad av nästan 100 % för main(), medan egenkostnaden är försumbar när det verkliga arbetet utförs i en annan funktion. </para>
885
 
</answer>
886
 
</qandaentry>
887
 
 
888
 
<qandaentry>
889
 
<question>
890
 
<para
891
 
>Verktygsraden och menyraden i min &kcachegrind; ser så spartansk ut. Är det normalt?</para>
892
 
</question>
893
 
<answer>
894
 
<para
895
 
>Uppenbarligen är &kcachegrind; felinstallerat på ditt system. Du rekommenderas att kompilera med installeringsprefixet satt till &kde;:s baskatalog i systemet, som <command
896
 
>configure --prefix=/opt/kde4; make install</command
897
 
>. Om du väljer en annan katalog, som $HOME/kde, måste du ställa in miljövariabeln KDEDIR till den katalogen innan du kör &kcachegrind;. </para>
898
 
</answer>
899
 
</qandaentry>
900
 
 
901
 
<qandaentry>
902
 
<question>
903
 
<para
904
 
>Om jag dubbelklickar på en funktion i anropsdiagramvyn, visas samma kostnad för main som för den aktiverade funktionen. Är det inte meningen att den alltid ska vara 100 %? </para>
905
 
</question>
906
 
<answer>
907
 
<para
908
 
>Du har aktiverat en funktion under main() som har en lägre kostnad än main(). Bara den del av funktionens totala kostnad som används när den aktiverade funktionen kör visas för en funktion, dvs. kostnaden som visas för en funktion kan aldrig vara större än kostnaden för den aktiverade funktionen. </para>
 
1042
>Vad är skillnaden mellan <guilabel
 
1043
>Inkl.</guilabel
 
1044
> och <guilabel
 
1045
>Själv</guilabel
 
1046
>? </para>
 
1047
</question>
 
1048
<answer>
 
1049
<para
 
1050
>De är kostnadsegenskaper för funktioner med avseende på en viss händelsetyp. Eftersom funktioner kan anropa varandra, är det rimligt att skilja på funktionens egen kostnad (<quote
 
1051
>självkostnad</quote
 
1052
>) och den samlade kostnaden inklusive alla anropade funktioner (<quote
 
1053
>inkluderande kostnad</quote
 
1054
>). <quote
 
1055
>Själv</quote
 
1056
> kallas också ibland <quote
 
1057
>egenkostnad</quote
 
1058
>. </para>
 
1059
<para
 
1060
>Alltså kommer du till exempel alltid att ha en samlad kostnad av nästan 100 % för <function
 
1061
>main()</function
 
1062
>, medan egenkostnaden är försumbar när det verkliga arbetet utförs i en annan funktion. </para>
 
1063
</answer>
 
1064
</qandaentry>
 
1065
 
 
1066
<qandaentry>
 
1067
<question>
 
1068
<para
 
1069
>Verktygsraden och menyraden i min &kcachegrind; ser så spartanska ut. Är det normalt?</para>
 
1070
</question>
 
1071
<answer>
 
1072
<para
 
1073
>Uppenbarligen är &kcachegrind; felinstallerat på ditt system. Du rekommenderas att kompilera med installeringsprefixet satt till &kde;:s baskatalog i systemet, som <userinput
 
1074
><command
 
1075
>configure <option
 
1076
>--prefix=<replaceable
 
1077
>/opt/kde4</replaceable
 
1078
></option
 
1079
></command
 
1080
>; <command
 
1081
>make install</command
 
1082
></userinput
 
1083
>. Om du väljer en annan katalog, som <filename class="directory"
 
1084
>$<envar
 
1085
>HOME</envar
 
1086
>/kde</filename
 
1087
>, måste du ställa in miljövariabeln <envar
 
1088
>KDEDIR</envar
 
1089
> till den katalogen innan du kör &kcachegrind;. </para>
 
1090
</answer>
 
1091
</qandaentry>
 
1092
 
 
1093
<qandaentry>
 
1094
<question>
 
1095
<para
 
1096
>Om jag dubbelklickar på en funktion i vyn <guilabel
 
1097
>Anropsdiagram</guilabel
 
1098
>, visas samma kostnad för <function
 
1099
>main()</function
 
1100
> som för den aktiverade funktionen. Är det inte meningen att den alltid ska vara 100 %? </para>
 
1101
</question>
 
1102
<answer>
 
1103
<para
 
1104
>Du har aktiverat en funktion under <function
 
1105
>main()</function
 
1106
> som har en lägre kostnad än <function
 
1107
>main()</function
 
1108
>. Bara den del av funktionens totala kostnad som används när den <emphasis
 
1109
>aktiverade</emphasis
 
1110
> funktionen kör visas för en funktion, dvs. kostnaden som visas för en funktion kan aldrig vara större än kostnaden för den aktiverade funktionen. </para>
909
1111
</answer>
910
1112
</qandaentry>
911
1113
 
913
1115
</qandaset>
914
1116
</chapter>
915
1117
 
916
 
<chapter id="glossary">
917
 
<title
918
 
>Ordlista</title>
919
 
 
920
 
<para
921
 
>Det följande är en blandad lista med termer. <itemizedlist>
922
 
<listitem
923
 
><para
924
 
>Profilering: Processen att samla in statistisk information om beteende under körning från programkörningar. </para
925
 
></listitem>
926
 
<listitem
927
 
><para
928
 
>Spåra: Processen att övervaka en programkörning och lagra händelser som inträffar sorterade enligt tidsstämpling i en utdatafil, kallad spårning. </para
929
 
></listitem>
930
 
<listitem
931
 
><para
932
 
>Spårning: En följd av tidsstämplade händelser som inträffat medan en programkörning spåras. Storleken är typiskt linjär i förhållande till programkörningens körtid. </para
933
 
></listitem>
934
 
<listitem
935
 
><para
936
 
>Profileringsdatafil: En fil som innehåller data som mätts upp i ett profileringsexperiment (eller del av ett sådant) eller skapats vid efterbehandling av en spårning. Dess storlek är typiskt linjär i förhållande till programmets kodstorlek. </para
937
 
></listitem>
938
 
<listitem
939
 
><para
940
 
>Profileringsdatadel (inkorrekt används också spårningsdel): Data från en profileringsdatafil. </para
941
 
></listitem>
942
 
<listitem
943
 
><para
944
 
>Profileringsexperiment: En programkörning övervakad av ett profileringsverktyg, som möjligen skapar flera profileringsdatafiler från delar av och/eller trådar i körningen. </para
945
 
></listitem>
946
 
<listitem
947
 
><para
948
 
>Profileringsprojekt: En inställning för profileringsexperiment som används för ett program som ska profileras, kanske i flera versioner. Jämförelser av profileringsdata är ofta bara meningsfullt mellan profileringsdata som skapas av experiment som görs inom ett profileringsprojekt. </para
949
 
></listitem>
950
 
<listitem
951
 
><para
952
 
>Kostnadsenhet: Ett abstrakt objekt som hör ihop med källkod som kan tilldelas händelseantal. Dimensioner för kostnadsenheter är kodposition (t.ex. källkodsrad, funktion), dataposition (t.ex. använd datatyp, dataobjekt), körposition (t.ex. tråd, process) och kombinationer av nämnda positioner (t.ex. anrop, objekt använda av satser, data utkastad från cache). </para
953
 
></listitem>
954
 
<listitem
955
 
><para
956
 
>Händelsetyp: Den sortens händelse vars kostnad kan tilldelas till en kostnadsenhet. Det finns både verkliga händelsetyper och ärvda händelsetyper. </para
957
 
></listitem>
958
 
<listitem
959
 
><para
960
 
>Verklig händelsetyp: En händelstyp som kan mätas av ett verktyg. Det kräver att en sensor existerar för den givna händelsetypen. </para
961
 
></listitem>
962
 
<listitem
963
 
><para
964
 
>Ärvd händelsetyp: En virtuell händelsetyp som bara syns i visualiseringen, som är definierad av en formel som beräknas från verkliga händelsetyper. </para
965
 
></listitem>
966
 
<listitem
967
 
><para
968
 
>Händelsekostnader: Summering av händelser av en viss händelsetyp som inträffar medan körningen är kopplad till en viss kostnadsenhet. Kostnaden tilldelas till enheten. </para
969
 
></listitem>
970
 
</itemizedlist>
971
 
</para>
972
 
</chapter>
 
1118
 
 
1119
<glossary>
 
1120
 
 
1121
<glossentry id="costentity">
 
1122
<glossterm
 
1123
>Kostnadsenhet</glossterm>
 
1124
<glossdef
 
1125
><para
 
1126
>Ett abstrakt objekt som hör ihop med källkod som kan tilldelas händelseantal. Dimensioner för kostnadsenheter är kodposition (t.ex. källkodsrad, funktion), dataposition (t.ex. använd datatyp, dataobjekt), körposition (t.ex. tråd, process) och kombinationer av nämnda positioner (t.ex. anrop, objekt använda av satser, data utkastad från cache).</para
 
1127
></glossdef>
 
1128
</glossentry>
 
1129
 
 
1130
<glossentry id="eventcosts">
 
1131
<glossterm
 
1132
>Händelsekostnader</glossterm>
 
1133
<glossdef
 
1134
><para
 
1135
>Summering av händelser av en viss händelsetyp som inträffar medan körningen är kopplad till en viss kostnadsenhet. Kostnaden tilldelas till enheten.</para
 
1136
></glossdef>
 
1137
</glossentry>
 
1138
 
 
1139
<glossentry id="eventtype">
 
1140
<glossterm
 
1141
>Händelsetyp</glossterm>
 
1142
<glossdef
 
1143
><para
 
1144
>Den sortens händelse vars kostnad kan tilldelas till en kostnadsenhet. Det finns både verkliga händelsetyper och ärvda händelsetyper.</para
 
1145
></glossdef>
 
1146
</glossentry>
 
1147
 
 
1148
<glossentry id="inheritedeventtype">
 
1149
<glossterm
 
1150
>Ärvd händelsetyp</glossterm>
 
1151
<glossdef
 
1152
><para
 
1153
>En virtuell händelsetyp som bara syns i visualiseringen, som är definierad av en formel som beräknas från verkliga händelsetyper.</para
 
1154
></glossdef>
 
1155
</glossentry>
 
1156
 
 
1157
<glossentry id="profiledatafile">
 
1158
<glossterm
 
1159
>Profileringsdatafil</glossterm>
 
1160
<glossdef
 
1161
><para
 
1162
>En fil som innehåller data som mätts upp i ett profileringsexperiment (eller del av ett sådant) eller skapats vid efterbehandling av en spårning. Dess storlek är typiskt linjär i förhållande till programmets kodstorlek.</para
 
1163
></glossdef>
 
1164
</glossentry>
 
1165
 
 
1166
<glossentry id="profiledatapart">
 
1167
<glossterm
 
1168
>Profileringsdatadel</glossterm>
 
1169
<glossdef
 
1170
><para
 
1171
>Data från en profileringsdatafil.</para
 
1172
></glossdef>
 
1173
</glossentry>
 
1174
 
 
1175
<glossentry id="profileexperiment">
 
1176
<glossterm
 
1177
>Profileringsexperiment</glossterm>
 
1178
<glossdef
 
1179
><para
 
1180
>En programkörning övervakad av ett profileringsverktyg, som möjligen skapar flera profileringsdatafiler från delar av och/eller trådar i körningen.</para
 
1181
></glossdef>
 
1182
</glossentry>
 
1183
 
 
1184
<glossentry id="profileproject">
 
1185
<glossterm
 
1186
>Profileringsprojekt</glossterm>
 
1187
<glossdef
 
1188
><para
 
1189
>En inställning för profileringsexperiment som används för ett program som ska profileras, kanske i flera versioner. Jämförelser av profileringsdata är ofta bara meningsfullt mellan profileringsdata som skapas av experiment som görs inom ett profileringsprojekt.</para
 
1190
></glossdef>
 
1191
</glossentry>
 
1192
 
 
1193
<glossentry id="profiling">
 
1194
<glossterm
 
1195
>Profilering</glossterm>
 
1196
<glossdef
 
1197
><para
 
1198
>Processen att samla in statistisk information om beteende under körning från programkörningar.</para
 
1199
></glossdef>
 
1200
</glossentry>
 
1201
 
 
1202
<glossentry id="realeventtype">
 
1203
<glossterm
 
1204
>Verklig händelsetyp</glossterm>
 
1205
<glossdef
 
1206
><para
 
1207
>En händelstyp som kan mätas av ett verktyg. Det kräver att en sensor existerar för den givna händelsetypen.</para
 
1208
></glossdef>
 
1209
</glossentry>
 
1210
 
 
1211
<glossentry id="trace">
 
1212
<glossterm
 
1213
>Spårning</glossterm>
 
1214
<glossdef
 
1215
><para
 
1216
>En följd av tidsstämplade händelser som inträffat medan en programkörning spåras. Storleken är typiskt linjär i förhållande till programkörningens körtid.</para
 
1217
></glossdef>
 
1218
</glossentry>
 
1219
 
 
1220
<glossentry id="tracepart">
 
1221
<glossterm
 
1222
>Spårningsdel</glossterm>
 
1223
<glosssee otherterm="profiledatapart"/>
 
1224
</glossentry>
 
1225
 
 
1226
<glossentry id="tracing">
 
1227
<glossterm
 
1228
>Spåra</glossterm>
 
1229
<glossdef
 
1230
><para
 
1231
>Processen att övervaka en programkörning och lagra händelser som inträffar sorterade enligt tidsstämpling i en utdatafil, kallad spårning.</para
 
1232
></glossdef>
 
1233
</glossentry>
 
1234
 
 
1235
</glossary>
973
1236
 
974
1237
<chapter id="credits">
975
1238
 
976
 
 
977
1239
<title
978
1240
>Tack till och licens</title>
979
1241
 
980
1242
<para
981
 
>&kappname; </para>
982
 
<para
983
1243
>Tack till Julian Seward för det utmärkta verktyget &valgrind;, och Nicholas Nethercote för tillägget &cachegrind;. Utan dessa program, skulle inte &kcachegrind; finnas. Vissa av idéerna för det grafiska gränssnittet kommer också från dem. </para>
984
1244
<para
985
 
>Och tack för alla felrapporter och förslag från olika användare. </para>
 
1245
>Tack för alla felrapporter och förslag från olika användare. </para>
986
1246
 
987
1247
<para
988
1248
>Översättning Stefan Asserhäll <email
1000
1260
>Hur man skaffar &kcachegrind;</title>
1001
1261
 
1002
1262
<para
1003
 
>&kcachegrind; är en del av paketet &package; i &kde;. För provisoriska utgåvor med mindre stöd, &callgrind; och ytterligare dokumentation, se hemsidan på <ulink url="http://kcachegrind.sf.net"
1004
 
> http://kcachegrind.sf.net</ulink
 
1263
>&kcachegrind; är en del av paketet &package; i &kde;. För provisoriska utgåvor med mindre stöd, &callgrind; och ytterligare dokumentation, se <ulink url="http://kcachegrind.sf.net"
 
1264
>webbsidan</ulink
1005
1265
>. Titta där för ytterligare installations- och kompileringsinstruktioner. </para>
1006
1266
</sect1>
1007
1267
 
1023
1283
>Anpassning</title>
1024
1284
 
1025
1285
<para
1026
 
>Alla inställningsalternativ finns antingen i inställningsdialogrutan eller i sammanhangsberoende menyer i visualiseringarna. </para>
 
1286
>Alla inställningsalternativ finns antingen i inställningsdialogrutan eller i sammanhangsberoende menyer i visualiseringarna.</para>
1027
1287
 
1028
1288
</sect1>
1029
1289
 
1031
1291
 
1032
1292
&documentation.index;
1033
1293
</book>
1034
 
<!--
1035
 
Local Variables:
1036
 
mode: sgml
1037
 
sgml-minimize-attributes:nil
1038
 
sgml-general-insert-case:lower
1039
 
sgml-indent-step:0
1040
 
sgml-indent-data:nil
1041
 
End:
1042
 
-->
1043
 
 
1044
 
 
1045
 
 
1046
 
 
1047
 
 
1048
 
 
1049
 
 
1050
 
 
1051
 
 
1052
 
 
1053
 
 
1054
 
 
1055