Ein stilisiertes Terminalfenster auf einem Laptop-PC.

fatmawati achmad zaenuri/Shutterstock.com

Linux-Programme fragen die Kernel einige Dinge für sie tun. Die |_+_| Befehl enthüllt diese Systemaufrufe. Sie können sie verwenden, um zu verstehen, wie Programme funktionieren und warum sie dies manchmal nicht tun.



bash einfache vs doppelte Anführungszeichen

Die Kernel- und Systemaufrufe

So schlau sie auch sein mögen, Computerprogramme können nicht alles für sich selbst tun. Sie müssen Anfragen stellen, um bestimmte Funktionen für sie ausführen zu lassen. Diese Anfragen gehen an den Linux-Kernel. Normalerweise gibt es eine Bibliothek oder eine andere Softwareschnittstelle, die das Programm aufruft, und die Bibliothek stellt dann die entsprechende Anforderung – einen sogenannten Systemaufruf – an den Kernel.

In der Lage zu sein, die Systemaufrufe eines Programms und die Antworten zu sehen, kann Ihnen helfen, das Innenleben von Programmen zu verstehen, die Sie interessieren oder die Sie geschrieben haben. Das ist was |_+_| tut . Es kann helfen, Probleme zu beheben und nach Engpässen zu suchen.

Das ist nicht dasselbe wie eine Anwendung debuggen mit einem Werkzeug wie |_+_| . Mit einem Debugging-Programm können Sie den internen Betrieb eines Programms während der Ausführung untersuchen. Sie können die Logik Ihres Programms durchgehen und Speicher- und Variablenwerte überprüfen. Zum Vergleich: Was |_+_| Erfasst die Systemaufrufinformationen, während das Programm ausgeführt wird. Wenn das verfolgte Programm beendet wird, |_+_| listet die Systemaufrufinformationen im Terminalfenster auf.

Systemaufrufe bieten alle Arten von Low-Level-Funktionen, wie beispielsweise Lese- und Schreibaktionen für Dateien, das Beenden von Prozessen und so weiter. Es gibt eine Liste mit Hunderten von Systemaufrufen auf dem syscalls man-Seite .

VERBUNDEN: Debuggen mit GDB: Erste Schritte

strace installieren

Wenn |_+_| noch nicht auf Ihrem Computer installiert ist, können Sie es ganz einfach installieren.

Verwenden Sie unter Ubuntu diesen Befehl:

strace

Geben Sie auf Fedora diesen Befehl ein:

strace

Auf Manjaro lautet der Befehl:

gdb

Erste Schritte mit strace

Wir verwenden ein kleines Programm, um |_+_| zu demonstrieren. Es tut nicht viel: Es öffnet eine Datei und schreibt eine Textzeile hinein, und es enthält keine Fehlerprüfung. Es ist nur ein kurzer Hack, damit wir etwas mit |_+_| verwenden können.

strace

Wir haben dies in einer Datei namens file-io.c gespeichert und mit |_+_| . kompiliert in eine ausführbare Datei namens |_+_|, benannt nach st Rennen ehemalige reichlich.

strace

Wir rufen |_+_| über die Befehlszeile und übergeben Sie den Namen unserer neuen ausführbaren Datei als den Prozess, den wir verfolgen möchten. Wir könnten genauso einfach jeden der Linux-Befehle oder jede andere ausführbare Binärdatei verfolgen. Wir verwenden unser kleines Programm aus zwei Gründen.

Der erste Grund ist, dass |_+_| ist ausführlich. Es kann viel ausgegeben werden. Das ist großartig, wenn Sie |_+_| . verwenden vor Wut, aber es kann anfangs überwältigend sein. Es gibt begrenzte |_+_| Ausgabe für unser kleines Programm. Der zweite Grund ist, dass unser Programm eine eingeschränkte Funktionalität hat und der Quellcode kurz und unkompliziert ist. Dies macht es einfacher zu erkennen, welche Abschnitte der Ausgabe sich auf die verschiedenen Teile der internen Abläufe des Programms beziehen.

strace

Wir können deutlich die |_+_| . sehen Systemaufruf Senden des Textes Schreiben Sie dies in die Datei in unsere geöffnete Datei und das |_+_| Systemaufruf. Dies beendet alle Threads in der Anwendung und sendet einen Rückgabewert zurück an die Shell.

Filtern der Ausgabe

Selbst mit unserem einfachen Demonstrationsprogramm gibt es eine Menge Output. Wir können die |_+_| . verwenden (Ausdruck)-Option. Wir übergeben den Namen des Systemaufrufs, den wir sehen möchten.

strace

Anzeige

Sie können Berichte zu mehreren Systemaufrufen erstellen, indem Sie sie als durch Kommas getrennte Liste hinzufügen. Fügen Sie keine Leerzeichen in die Liste der Systemaufrufe ein.

strace

Senden der Ausgabe an eine Datei

Der Vorteil des Filterns der Ausgabe ist auch das Problem beim Filtern der Ausgabe. Sie sehen, was Sie sehen möchten, aber Sie sehen nichts anderes. Und einige dieser anderen Ausgaben könnten für Sie nützlicher sein als die Dinge, die Sie sehen möchten.

Manchmal ist es bequemer, alles zu erfassen und die gesamten Ergebnisse zu durchsuchen und zu scrollen. So schließen Sie nichts Wichtiges aus Versehen aus. Die |_+_| Mit der Option (Ausgabe) können Sie die Ausgabe von einem |_+_| . senden Sitzung in eine Textdatei.

gcc

Du kannst dann benutze die |_+_| Befehl um durch die Liste zu blättern und nach Systemaufrufen – oder etwas anderem – anhand des Namens zu suchen.

stex

Sie können jetzt alle Suchfunktionen von |_+_| verwenden, um die Ausgabe zu untersuchen.

VERBUNDEN: So verwenden Sie den less-Befehl unter Linux

Zeitstempel hinzufügen

Sie können der Ausgabe mehrere verschiedene Zeitstempel hinzufügen. Die |_+_| (Relative Timestamps) Option fügt Zeitstempel hinzu, die den Zeitunterschied zwischen dem Start jedes aufeinanderfolgenden Systemaufrufs anzeigen. Beachten Sie, dass diese Zeitwerte die Zeit umfassen, die für den vorherigen Systemaufruf aufgewendet wurde und alles andere, was das Programm vor dem nächsten Systemaufruf getan hat.

strace

Anzeige

Die Zeitstempel werden am Anfang jeder Ausgabezeile angezeigt.

Um die für jeden Systemaufruf aufgewendete Zeit anzuzeigen, verwenden Sie |_+_| (Systemaufruf-Zeiten) Option. Dies zeigt die Zeitdauer an, die innerhalb jedes Systemaufrufs verbracht wurde.

strace

Die Zeitdauern werden am Ende jeder Systemrufleitung angezeigt.

Um die Uhrzeit anzuzeigen, zu der jeder Systemaufruf aufgerufen wurde, verwenden Sie |_+_| (absolute Zeitstempel) Option. Dies zeigt die Uhrzeit der Wanduhr mit einer Auflösung von Mikrosekunden an.

strace

Die Zeiten werden am Anfang jeder Zeile angezeigt.

Verfolgen eines laufenden Prozesses

Wenn der Prozess, den Sie verfolgen möchten, bereits läuft, können Sie noch |_+_| . anhängen dazu. Dazu müssen Sie die Prozess-ID kennen. Sie können benutze |_+_| mit strace um dies zu finden. Bei uns läuft Firefox. Um die ID des |_+_| . herauszufinden Prozess können wir |_+_| . verwenden und leite es durch |_+_|.

write

Anzeige

Wir können sehen, dass die Prozess-ID 8483 ist. Wir verwenden die |_+_| (Prozess-ID) Option, um |_+_| . mitzuteilen an welchen Prozess angehängt werden soll. Beachten Sie, dass Sie |_+_| . verwenden müssen :

exit_group

Sie sehen eine Benachrichtigung, dass |_+_| sich an den Prozess angehängt hat, dann werden die System-Trace-Aufrufe wie gewohnt im Terminalfenster angezeigt.

Erstellen eines Berichts

Die |_+_| (nur Zusammenfassung) Option verursacht |_+_| um einen Bericht zu drucken. Es generiert eine Tabelle mit Informationen zu den Systemaufrufen, die vom verfolgten Programm getätigt wurden.

-e

Die Spalten sind:

    % Zeit: Der Prozentsatz der Ausführungszeit, der für jeden Systemaufruf aufgewendet wurde. Sekunden: Die Gesamtzeit in Sekunden und Mikrosekunden, die für jeden Systemaufruf aufgewendet wurde. usecs/call: Die durchschnittliche Zeit in Mikrosekunden, die für jeden Systemaufruf aufgewendet wird. Anrufe: Die Häufigkeit, mit der jeder Systemaufruf ausgeführt wurde. Fehler: Die Anzahl der Fehler für jeden Systemaufruf. Systemaufruf: Der Name des Systemaufrufs.

Diese Werte zeigen Nullen für triviale Programme, die schnell ausgeführt und beendet werden. Für Programme, die etwas Sinnvolleres tun als unsere Demonstrationsanwendung, werden reale Werte angezeigt.

Tiefe Einblicke, ganz einfach

Die |_+_| Ausgabe kann Ihnen zeigen, welche Systemaufrufe getätigt werden, welche wiederholt ausgeführt werden und wie viel Ausführungszeit innerhalb des Kernel-seitigen Codes verbracht wird. Das sind tolle Informationen. Wenn Sie versuchen zu verstehen, was in Ihrem Code vor sich geht, vergessen Sie oft, dass Ihre Binärdatei fast ununterbrochen mit dem Kernel interagiert, um viele seiner Funktionen auszuführen.

Wenn Sie |_+_| verwenden, sehen Sie das vollständige Bild.

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN
  • › So finden Sie Ihr Spotify Wrapped 2021
  • Cyber ​​Monday 2021: Die besten Tech-Deals
  • › 5 Websites, die jeder Linux-Benutzer mit einem Lesezeichen versehen sollte
  • › Der Computerordner ist 40: Wie Xerox Star den Desktop erstellte
  • › Funktionen vs. Formeln in Microsoft Excel: Was ist der Unterschied?
  • › Was ist MIL-SPEC Fallschutz?