Scroll to navigation

sprof(1) General Commands Manual sprof(1)

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:

Vis en liste af par for kaldstier for grænsefladerne eksporteret af det delte objekt, sammen med antallet af gange hver sti anvendes.
Opret en flad profil for alle funktonerne i det overvågede objekt, med antal og krydser.
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.
Vis en kort hjælpetekst og afslut.
Vis programversionen og afslut.

STANDARDER

Kommandoen sprof er en GNU-udvidelse, er ikke til stede i POSIX.1.

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.

7. januar 2023 Linux man-pages 6.03