Dit is de opdracht sprof die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
sprof - lees en toon gedeelde objectprofileringsgegevens
KORTE INHOUD
sprf [optie] ... gedeeld-object-pad [profiel-gegevenspad]
PRODUCTBESCHRIJVING
De sprf opdracht geeft een profieloverzicht weer voor het gedeelde object (gedeelde bibliotheek)
opgegeven als het eerste opdrachtregelargument. De profileringssamenvatting wordt gemaakt met
eerder gegenereerde profileringsgegevens in het (optionele) tweede opdrachtregelargument. Indien
de padnaam van de profileringsgegevens wordt weggelaten, dan sprf zal proberen het af te leiden met behulp van de
soname van het gedeelde object, op zoek naar een bestand met de naam .profiel in de
huidige map.
OPTIES
De volgende opdrachtregelopties specificeren de profieluitvoer die moet worden geproduceerd:
-c, --call-paren
Druk een lijst af met paren oproeppaden voor de interfaces die zijn geëxporteerd door de gedeelde
object, samen met het aantal keren dat elk pad wordt gebruikt.
-p, --plat profiel
Genereer een plat profiel van alle functies in het bewaakte object, met
telt en tikt.
-q, --grafiek
Genereer een oproepgrafiek.
Als geen van de bovenstaande opties is opgegeven, is het standaardgedrag het weergeven van een flat
profiel en een oproepgrafiek.
De volgende aanvullende opdrachtregelopties zijn beschikbaar:
-?, --help
Geef een samenvatting weer van de opdrachtregelopties en -argumenten en sluit af.
--gebruik
Geef een kort gebruiksbericht weer en sluit af.
-V, --versie
Geef de programmaversie weer en sluit af.
CONFORM TO
De sprf commando is een GNU-extensie, niet aanwezig in POSIX.1.
VOORBEELD
Het volgende voorbeeld demonstreert het gebruik van sprf. Het voorbeeld bestaat uit een hoofd
programma dat twee functies in een gedeeld object aanroept. Eerst de code van het hoofdprogramma:
$ hoe prog.c
#inclusief
ongeldig x1 (nietig);
ongeldig x2 (nietig);
int
main(int argc, char *argv[])
{
x1();
x2();
afsluiten (EXIT_SUCCESS);
}
De functies x1() en x2() zijn gedefinieerd in het volgende bronbestand dat wordt gebruikt om
construeer het gedeelde object:
$ hoe libdemo.c
#erbij betrekken
komen te vervallen
consumerCpu1(int lim)
{
intj;
voor (j = 0; j < lim; j++)
getppid();
}
komen te vervallen
x1(leeg) {
intj;
voor (j = 0; j < 100; j++)
consumerenCpu1(200000);
}
komen te vervallen
consumerCpu2(int lim)
{
intj;
voor (j = 0; j < lim; j++)
getppid();
}
komen te vervallen
x2(leeg)
{
intj;
voor (j = 0; j < 1000; j++)
consumerenCpu2(10000);
}
Nu construeren we het gedeelde object met de echte naam libdemo.so.1.0.1, en de soname
libdemo.so.1:
$ cc -g -fPIC -gedeeld -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Vervolgens construeren we symbolische koppelingen voor de naam van de bibliotheek en de naam van de linker van de bibliotheek:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.zo
Vervolgens compileren we het hoofdprogramma, koppelen het aan het gedeelde object en geven dan een lijst van de
dynamische afhankelijkheden van het programma:
$ cc -g -o prog prog.c -L. -ldemo
$ ldd prog
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => niet gevonden
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
Om profileringsinformatie voor het gedeelde object te krijgen, definiëren we de omgeving
variabele LD_PROFIEL met de bijnaam van de bibliotheek:
$ exporteren LD_PROFILE=libdemo.so.1
We definiëren dan de omgevingsvariabele LD_PROFILE_OUTPUT met de padnaam van de
map waar profieluitvoer moet worden geschreven, en maak die map aan als dat niet het geval is
bestaan al:
$ exporteren LD_PROFILE_OUTPUT=$(wd)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT
LD_PROFIEL zorgt ervoor dat profileringsoutput toegevoegd naar het uitvoerbestand als het al bestaat,
dus we zorgen ervoor dat er geen reeds bestaande profileringsgegevens zijn:
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profiel
Vervolgens voeren we het programma uit om de profileringsuitvoer te produceren, die wordt geschreven naar een bestand in de
map gespecificeerd in LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH=. ./prog
$ ls prof_gegevens
libdemo.so.1.profiel
We gebruiken dan de sprf -p optie om een plat profiel te genereren met tellingen en vinkjes:
$ sprf -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profiel
Vlak profiel:
Elk monster telt als 0.01 seconden.
% cumulatief zelf zelf totaal
tijd seconden seconden belt ons/bel ons/roep naam
60.00 0.06 0.06 100 600.00 verbruikenCpu1
40.00 0.10 0.04 1000 40.00 verbruikenCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2
De sprf -q optie genereert een oproepgrafiek:
$ sprf -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profiel
index % tijd zelf kinderen noemden naam
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 verbruikenCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1
[1] 0.0 0.00 0.00 1x1 [1]
0.00 0.00 100/100 verbruik Cpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 verbruikenCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1
[3] 0.0 0.00 0.00 1x2 [3]
0.00 0.00 1000/1000 verbruik Cpu2 [2]
-----------------------------------------------
Boven en onder de " " strings vertegenwoordigen identifiers die buiten de . vallen
geprofileerd object (in dit voorbeeld zijn dit instanties van hoofd()).
De sprf -c optie genereert een lijst met oproepparen en het aantal keren dat ze voorkomen:
$ sprf -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profiel
x1 1
x1 verbruik Cpu1 100
x2 1
x2 verbruik Cpu2 1000
Gebruik sprof online met onworks.net-services