Dies ist der Befehl sprof, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
sprof – Lesen und Anzeigen von Profilierungsdaten für gemeinsam genutzte Objekte
ZUSAMMENFASSUNG
spr [ganz ohne irgendetwas tun oder drücken zu müssen.] ... Shared-Object-Pfad [Profildatenpfad]
BESCHREIBUNG
Das spr Der Befehl zeigt eine Profilierungszusammenfassung für das gemeinsam genutzte Objekt (gemeinsam genutzte Bibliothek) an.
als erstes Befehlszeilenargument angegeben. Die Profiling-Zusammenfassung wird mit erstellt
zuvor generierte Profilierungsdaten im (optionalen) zweiten Befehlszeilenargument. Wenn
Der Pfadname der Profilierungsdaten wird dann weggelassen spr Ich werde versuchen, es anhand der abzuleiten
soname des gemeinsam genutzten Objekts und sucht nach einer Datei mit diesem Namen .Profil in England,
Aktuelles Verzeichnis.
OPTIONAL
Die folgenden Befehlszeilenoptionen geben die zu erzeugende Profilausgabe an:
-c, --call-pairs
Drucken Sie eine Liste von Aufrufpfadpaaren für die von der Freigabe exportierten Schnittstellen
Objekt zusammen mit der Häufigkeit, mit der jeder Pfad verwendet wird.
-p, --flat-profile
Erzeugen Sie ein flaches Profil aller Funktionen im überwachten Objekt mit
zählt und tickt.
-q, --Graph
Erzeugen Sie ein Anrufdiagramm.
Wenn keine der oben genannten Optionen angegeben ist, besteht das Standardverhalten darin, eine Ebene anzuzeigen
Profil und ein Anrufdiagramm.
Die folgenden zusätzlichen Befehlszeilenoptionen sind verfügbar:
-?, --help
Zeigen Sie eine Zusammenfassung der Befehlszeilenoptionen und -argumente an und beenden Sie den Vorgang.
--Verwendungszweck
Zeigen Sie eine kurze Nutzungsmeldung an und beenden Sie den Vorgang.
-V, --Version
Programmversion anzeigen und beenden.
KONFORM TO
Das spr command ist eine GNU-Erweiterung, die in POSIX.1 nicht vorhanden ist.
BEISPIEL
Das folgende Beispiel demonstriert die Verwendung von spr. Das Beispiel besteht aus einem Hauptteil
Programm, das zwei Funktionen in einem gemeinsam genutzten Objekt aufruft. Zuerst der Code des Hauptprogramms:
$ Katze prog.c
#einschließen
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
Beenden (EXIT_SUCCESS);
}
Die Funktionen x1() und x2() sind in der folgenden Quelldatei definiert, die verwendet wird
Konstruieren Sie das gemeinsame Objekt:
$ Katze libdemo.c
#enthalten
ungültig
verbrauchenCpu1(int lim)
{
int j;
für (j = 0; j < lim; j++)
getppid();
}
ungültig
x1(void) {
int j;
für (j = 0; j < 100; j++)
verbrauchenCpu1(200000);
}
ungültig
verbrauchenCpu2(int lim)
{
int j;
für (j = 0; j < lim; j++)
getppid();
}
ungültig
x2(ungültig)
{
int j;
für (j = 0; j < 1000; j++)
verbrauchenCpu2(10000);
}
Jetzt erstellen wir das gemeinsame Objekt mit dem echten Namen libdemo.so.1.0.1, und der Soname
libdemo.so.1:
$ cc -g -fPIC -geteilt -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Dann erstellen wir symbolische Links für den Bibliotheks-Sonamen und den Bibliotheks-Linker-Namen:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so
Als nächstes kompilieren wir das Hauptprogramm, verknüpfen es mit dem gemeinsam genutzten Objekt und listen es dann auf
dynamische Abhängigkeiten des Programms:
$ cc -g -o prog prog.c -ICH. -ldemo
$ ldd prog
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => nicht gefunden
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
Um Profilinformationen für das gemeinsame Objekt zu erhalten, definieren wir die Umgebung
Variable LD_PROFILE mit dem Namen der Bibliothek:
$ exportieren LD_PROFILE=libdemo.so.1
Anschließend definieren wir die Umgebungsvariable LD_PROFILE_OUTPUT mit dem Pfadnamen des
Verzeichnis, in das die Profilausgabe geschrieben werden soll, und erstellen Sie dieses Verzeichnis, wenn dies nicht der Fall ist
existieren bereits:
$ exportieren LD_PROFILE_OUTPUT=$(pwd)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT
LD_PROFILE bewirkt, dass die Profilerstellungsausgabe erfolgt angehängt in die Ausgabedatei, falls diese bereits vorhanden ist,
Daher stellen wir sicher, dass keine bereits vorhandenen Profilierungsdaten vorhanden sind:
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile
Anschließend führen wir das Programm aus, um die Profilerstellungsausgabe zu erstellen, die in eine Datei im geschrieben wird
Verzeichnis angegeben in LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH=. ./prog
$ ls prof_data
libdemo.so.1.profile
Wir benutzen dann die spr -p Option zum Generieren eines flachen Profils mit Zählungen und Teilstrichen:
$ spr -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Flaches Profil:
Jede Probe zählt 0.01 Sekunden.
% kumulierte Selbst-Gesamtsumme
Zeit Sekunden Sekunden ruft uns an/ruft uns an/Name anrufen
60.00 0.06 0.06 100 600.00 verbrauchenCpu1
40.00 0.10 0.04 1000 40.00 verbrauchenCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2
Das spr -q Option generiert ein Anrufdiagramm:
$ spr -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Index % der Zeit, in der selbst Kinder den Namen aufgerufen haben
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 verbrauchenCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 verbrauchenCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 verbrauchenCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 verbrauchenCpu2 [2]
-----------------------------------------------
Oben und unten das „ „Strings stellen Bezeichner dar, die außerhalb von liegen
profiliertes Objekt (in diesem Beispiel sind dies Instanzen von Main()).
Das spr -c Option generiert eine Liste von Anrufpaaren und der Anzahl ihrer Vorkommen:
$ spr -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
x1 1
x1 verbrauchenCpu1 100
x2 1
x2 verbrauchenCpu2 1000
Nutzen Sie Sprof online über die Dienste von onworks.net