lprof(1) lprof(1)
NAME
lprof - Ausführungsprofil zeilenweise ausgeben
SYNTAX
lprof [-p] [-s] [-x] [-I incdv] [-r srcdatei] [-c cntdatei] [-o prog] [-V]
lprof -m datei1.cnt datei2.cnt datein.cnt [-T] -d destdatei.cnt
BESCHREIBUNG
lprof meldet die Ausführungscharakteristika eines Programms zeilen-
weise. Für die Zeilenangaben ist das Quellprogramm ausschlaggebend.
Dies ist dann sinnvoll, wenn festgestellt werden soll, welche Code-
teile ausgeführt wurden und wie oft diese ausgeführt wurden.
lprof interpretiert eine Datei mit Meßwerten (standardmäßig prog.cnt),
die von dem profilierten Programm prog erstellt wird (standardmäßig
a.out). prog erstellt eine Datei mit Meßwerten, wenn es mit der cc-
Option -ql geladen wurde. Die Profil-Informationen werden für Funktio-
nen in einer Quelldatei berechnet, wenn bei der Übersetzung der Quell-
datei die Option -ql verwendet wurde.
Für ein gemeinsam nutzbares Objekt kann ein Profil erstellt werden,
indem bei der Erstellung des gemeinsam nutzbaren Objekts -ql angegeben
wird. Wenn eine dynamisch gebundene, ausführbare Datei abläuft, wird
für jedes profilierte, gemeinsam nutzbares Objekt, das zur ausführba-
ren Datei gebunden ist, eine Datei mit Meßwerten erstellt. Dieses
Merkmal ist dann sinnvoll einsetzbar, wenn ein Bericht über mehrere
unterschiedliche Ausführungen einer gemeinsamen Bibliothek erstellt
werden soll. Wenn die Programme prog1 und prog2 zum Beispiel beide die
Bibliothek libx.a verwenden, werden beim Ablauf der profilierten Pro-
gramme zwei Dateien mit Meßwerten, prog1.cnt und prog2.cnt, erstellt.
Diese beiden Dateien können nicht kombiniert werden. Wenn libx jedoch
als profiliertes, gemeinsam nutzbares Objekt (libx.so) erstellt wird
und prog1 und prog2 als profilierte, dynamisch gebundene, ausführbare
Dateien erstellt werden, so erstellt der Ablauf dieser Programme mit
der Option merge drei Dateien mit Meßwerten. eine Datei, libx.so.cnt,
enthält die Profil-Informationen libx aus beiden Abläufen.
lprof gibt standardmäßig ein Listing mit Quellcodedateien aus (die
Namen sind in der Symboltabelle der ausführbaren Datei abgelegt).
Dabei steht vor jeder Zeile die Zeilennummer (in der Quellcodedatei)
und die Häufigkeit der Ausführung dieser Zeile.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
lprof(1) lprof(1)
OPTIONEN
Die folgenden Optionen können einzeln oder, in beliebiger Reihenfolge,
in Kombination angegeben werden:
-p Listing ausgeben. Dabei steht vor jeder Zeile die Zeilennummer
und die Häufigkeit der Ausführung (Standard). Diese Option kann
zusammen mit der Option -s verwendet werden. Dann werden sowohl
das Listing mit dem Quellcode als auch eine Zusammenfassung aus-
gegeben.
-s Zusammenfassung ausgeben, welcher Prozentsatz des Codes pro Funk-
tion ausgeführt wurde.
-x Statt der Anzahl der Ausführungen soll vor jeder Zeile die Zei-
lennummer angegeben werden. Wenn die Zeile nicht ausgeführt
wurde, soll für diese Zeile ein [U] ausgegeben werden. Wenn die
Zeile ausgeführt wurde, wird nur die Zeilennummer ausgegeben.
-I incdv
Nach Quell- oder Include-Dateien wird, zusätzlich zum aktuellen
Dateiverzeichnis und dem Standard-Dateiverzeichnis für #include-
Dateien (normalerweise /usr/include), auch im Dateiverzeichnis
incdv gesucht. Der Benutzer kann mehrere Dateiverzeichnisse ange-
ben, indem er die Option -I mehrmals verwendet.
-r srcdatei
Statt alle Quellcodedateien sollen nur die Dateien ausgegeben
werden, die bei der Option -r angegeben sind (kann nur zusammen
mit der Option -p verwendet werden). Der Benutzer kann mit einer
Option -r mehrere Dateien angeben.
-c cntdatei
Als Eingabedatei mit Meßwerten soll die Datei cntdatei, und nicht
prog.cnt, verwendet werden.
-o prog
Den Namen des Programms prog statt des Namens verwenden, der ver-
wendet wurde, als die Datei mit den Meßwerten erstellt wurde. Da
der in der Datei mit Meßwerten abgelegte Programmname den relati-
ven Pfad enthält, ist diese Option notwendig, wenn die ausführ-
bare Datei oder die Datei mit den Meßwerten verschoben wurde.
-V Versionsnummer von lprof auf die Standardfehlerausgabe ausgeben.
Mischen von Datendateien (Merge)
lprof kann auch dazu verwendet werden, Dateien mit Meßwerten zu
mischen. Die Option -m muß zusammen mit der Option -d verwendet wer-
den:
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
lprof(1) lprof(1)
-m datei1.cnt datei2.cnt datein.cnt -d destdatei.cnt
Mischen der Datendateien datei1.cnt bis datein.cnt durch Summie-
ren der Ablaufzähler pro Zeile. Daten von verschiedenen Durchläu-
fen können so zusammengefaßt werden. Das Ergebnis wird in
destdatei.cnt geschrieben. Die Datendateien müssen Profildaten
für das gleiche prog enthalten (siehe Option -T).
-T Ignorieren des Zeitstempels. Normalerweise werden die Zeitstempel
der profilierten, ausführbaren Dateien überprüft. Die Datenda-
teien werden nicht gemischt, wenn die Zeitstempel nicht überein-
stimmen. Bei Angabe von -T wird diese Prüfung nicht durchgeführt.
Steuerung der Laufzeit-Profilumgebung
Die Umgebungsvariable PROFOPTS ermöglicht eine Steuerung der Profilie-
rung zur Laufzeit. Wenn ein profiliertes Programm (oder gemeinsam
genutztes Objekt) kurz vor der Beendigung steht, prüft es den Wert von
PROFOPTS. So wird festgestellt, wie die Profildaten bearbeitet werden
sollen. Ein gemeinsam genutztes Objekt, das kurz vor der Beendigung
steht, reagiert auf jede PROFOPTS-Option außer file=dateiname.
Die Umgebungsvariable PROFOPTS ist eine Liste mit Optionen, die durch
Kommas getrennt sind. Diese Optionen werden von dem Programm interpre-
tiert, für das die Profilierung ausgeführt wird. Wenn PROFOPTS in der
Umgebung nicht definiert ist, wird die Standardaktion ausgeführt: die
Profildaten werden in einer Datei (mit dem Standardnamen prog.cnt) im
aktuellen Dateiverzeichnis abgelegt. Wenn PROFOPTS auf die Null-
Zeichenkette gesetzt ist, werden keine Profildaten gespeichert. Die
folgenden Optionen stehen zur Verfügung:
msg=[y|n]
Wenn msg=y angegeben ist, wird eine Meldung auf stderr ausgege-
ben, die besagt, daß Profildaten gespeichert werden. Wird msg=n
angegeben, so werden nur die Fehlermeldungen der Profilierung
ausgegeben. Standard ist msg=y.
merge=[y|n]
Wenn merge=y angegeben wird, werden die Datendateien nach erfolg-
reichen Durchgängen gemischt. Wenn merge=n angegeben wird, werden
die Datendateien nach erfolgreichen Durchgängen nicht gemischt.
Die Datendatei wird dann nach jeder Ausführung überschrieben.
Merge schlägt fehl, wenn das Programm neu übersetzt wurde und die
Datendatei in TMPDIR bleibt. Standard ist merge=n.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
lprof(1) lprof(1)
pid=[y|n]
Wenn pid=y angegeben wird, enthält der Name der Datendatei die
Prozeßnummer des profilierten Programms. Durch die Aufnahme der
Prozeßnummer wird die Erstellung unterschiedlicher Datendateien
für Programme, die fork aufrufen, möglich. Wenn pid=n angegeben
wird, wird der Standardname verwendet. Standard ist pid=n. Damit
lprof einen Profilbericht erstellt, muß die Option -c für lprof
angegeben werden. Andernfalls schlägt die Standardeinstellung
fehl.
dir=dvname
Die Datendatei wird in dem Dateiverzeichnis dvname abgelegt, wenn
diese Option angegeben wird. Andernfalls wird die Datendatei in
dem Dateiverzeichnis erstellt, das am Ende der Ausführung das
aktuelle Dateiverzeichnis ist.
file=dateiname
Wenn diese Option angegeben ist, wird dateiname als der Name der
Datendatei in dvname verwendet, die von dem profilierten Programm
erstellt wird. Andernfalls wird der Standardname verwendet. Wenn
lprof einen Profilbericht erstellen soll, muß die Option -c für
lprof angegeben werden, wenn die Dateioption bei der Ausführung
verwendet wurde. Andernfalls schlägt die Standardeinstellung
fehl.
HINWEISE
Wenn destdatei.cnt existiert, wird der alte Inhalt für die Option -m
gelöscht.
Eine Profilierung ist für optimierten Code nicht möglich. Wenn sowohl
die Optimierung als auch eine zeilenweise Profilierung angefordert
werden, so hat die Profilierung Vorrang.
Programme, die argv[0] modifizieren, sind unter lprof nicht lauffähig.
Verschiedene Bestandteile einer Zeile in einer Quelldatei können
unterschiedlich oft ausgeführt werden (siehe die for-Schleife im Bei-
spiel unten). Die Zählung bezieht sich auf den ersten Teil der Zeile.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
lprof(1) lprof(1)
Im folgenden Beispiel besteht Zeile 5 mit der for-Schleife aus drei
Teilen:
main()
1 [2] {
int j;
1 [5] for (j = 0; j > 5; j++)
5 [6] sub(j);
1 [8] }
sub(a)
int a;
5 [12] {
5 [13] printf(a is %d\n, a);
5 [14] }
Die Anzahl für die Zeile bezieht sich jedoch auf die Initialisierung
(j = 0).
DATEIEN
prog.cnt
Profildaten
TMPDIR
Normalerweise /var/tmp. Durch Setzen der Umgebungsvariablen
TMPDIR ist eine Neudefinition möglich.
SIEHE AUCH
cc(1), fork(2), tmpnam(3S).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98