Provided by: manpages-da_4.26.0-1_all 

NAVN
sprof - læs og vis delte objektprofileringsdata
SYNOPSIS
sprof [tilvalg]... delt-objekt-sti [profil-data-sti]
BESKRIVELSE
Kommandoen sprof viser en profileringsoversigt for det delte objekt (delt bibliotek) angivet som dets
første kommandolinjeargument. Profileringsoversigten oprettes via tidligere oprettede profileringsdata i
det (valgfrie) andet kommandolinjeargument. Hvis profileringsdatastinavnet udelades, så vil sprof forsøge
at udlede denne via soname for det delte objekt, kiggende efter en fil med navnet <soname>.profile i den
nuværende mappe.
TILVALG
De følgende kommandolinjetilvalg angiver profilresultatet:
--call-pairs
-c Vis en liste af par for kaldstier for grænsefladerne eksporteret af det delte objekt, sammen med
antallet af gange hver sti anvendes.
--flat-profile
-p Opret en flad profil for alle funktonerne i det overvågede objekt, med antal og krydser.
--graph
-q Opret en kaldgraf.
Hvis ingen af de ovenstående tilvalg er angivet, så er standardopførelsen at vise en flad profil og en
kaldgraf.
De følgende yderligere tilvalg for kommandolinjen er tilgængelige:
--help
-? Vis en summering af tilvalg for kommandolinjen samt argumenter og afslut.
--usage
Vis en kort hjælpetekst og afslut.
--version
-V Vis programversionen og afslut.
STANDARDER
GNU.
EKSEMPLER
Det følgende eksempel viser brugen af sprof. Eksemplet består af et hovedprogram, der kalder to
funktioner i et delt objekt. Først koden for hovedprogrammet:
$ cat prog.c
#include <stdlib.h>
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
exit(EXIT_SUCCESS);
}
Funktionerne x1() og x2() er defineret i den følgende kildefil, der bruges til at konstruere det delte
objekt:
$ cat libdemo.c
#include <unistd.h>
void
consumeCpu1(int lim)
{
for (unsigned int j = 0; j < lim; j++)
getppid();
}
void
x1(void) {
for (unsigned int j = 0; j < 100; j++)
consumeCpu1(200000);
}
void
consumeCpu2(int lim)
{
for (unsigned int j = 0; j < lim; j++)
getppid();
}
void
x2(void)
{
for (unsigned int j = 0; j < 1000; j++)
consumeCpu2(10000);
}
Nu konstruerer vi det delte objekt med det reelle navn libdemo.so.1.0.1 og soname libdemo.so.1:
$ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Så konstruerer vi symbolske henvisninger for biblioteket soname og henvisingsnavnet for biblioteket:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so
Efterfølgende kompilerer vi hovedprogrammet, henviser det til det delte objekt og viser de dynamiske
afhængigheder for programmet:
$ cc -g -o prog prog.c -L. -ldemo
$ ldd prog
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
For at indhente profileringsinformation for det delte objekt definerer vi miljøvariablen LD_PROFILE med
soname for biblioteket:
$ export LD_PROFILE=libdemo.so.1
Så definerer vi miljøvariablen LD_PROFILE_OUTPUT med stinavnet for mappen, hvor profilresultatet skal
skrives, og opretter den mappe, hvis den ikke allerede findes:
$ export LD_PROFILE_OUTPUT=$(pwd)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT
LD_PROFILE gør at profileringsresultatet tilføjes til resultatfilen, hvis den allerede findes, så vi
sikrer, at der ikke er allerede er præprofileringsdata:
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile
Så afvikler vi programmet for at lave profileringsresultatet, der skrives til en fil i mappen angivet i
LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH=. ./prog
$ ls prof_data
libdemo.so.1.profile
Vi bruger så tilvalget sprof -p til at oprette en flad profil med antal og krydser:
$ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls us/call us/call name
60.00 0.06 0.06 100 600.00 consumeCpu1
40.00 0.10 0.04 1000 40.00 consumeCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2
Tilvalget sprof -q opretter en kaldgraf:
$ sprof -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
index % time self children called name
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 consumeCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 consumeCpu2 [2]
-----------------------------------------------
Over og under, strengene »<UNKNOWN>« repræsenterer identifikatorer, der er uden for det profilerede
objekt (i dette eksempel er disse instanser af main()).
Tilvalget sprof -c opretter en list af kaldpar og antallet af deres forekomster:
$ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
<UNKNOWN> x1 1
x1 consumeCpu1 100
<UNKNOWN> x2 1
x2 consumeCpu2 1000
SE OGSÅ
gprof(1), ldd(1), ld.so(8)
OVERSÆTTELSE
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>
Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 eller nyere for
ophavsretbetingelser. Der er INGEN ANSVAR.
Hvis du støder på fejl i oversættelsen af denne vejledning, skal du sende en besked til debian-l10n-
danish@lists.debian.org.
Linux man-pages 6.9.1 15. juni 2024 sprof(1)