Das Aufspüren eines Computerprogramms ist nicht nur denen vorbehalten, die den Quellcode haben, sie können es lesen und wissen, wie man einen Debugger verwendet. Jeder Linux-Benutzer kann eine ausführbare Datei mit strace verfolgen. Finde heraus wie!
Was ist es strace?
strace ist ein Linux-Dienstprogramm, mit dem Sie die Systemaufrufe einer bestimmten Anwendung verfolgen können. Es erfasst auch Signale und erzeugt eine detaillierte Ausgabe aller beobachteten Informationen..
Eine neue Person zum Krabbeln und Krabbeln, in der Regel, Sie fragen sich vielleicht, warum das nützlich ist. Ein professioneller IT-Ingenieur fragt vielleicht, wie viele Informationen Strace wirklich erfassen kann, vor allem, wenn Sie wissen, wie viele Informationen ein Debugger wie GDB sehen kann.
Wenn Sie daran interessiert sind, Computercodes und -programme zu debuggen, siehe unseren Beitrag Debugging mit GDB: Einleitung.
In beiden Fällen gibt es gute Nachrichten! Die Verfolgung aller Systemaufrufe und -signale liefert ein vollständiges Bild des Programmbetriebs, und es ist ein großartiges Tool zur Fehlerbehebung und sogar zum Debuggen. Zur selben Zeit, läuft während der Laufzeit (als Wickelverfahren), aber es lässt sich leicht in einer Protokolldatei nachverfolgen und bietet einen leicht verständlichen Überblick über die Aktionen eines Programms.
Vergleich mit GDB, das ist auch ein Wickelverfahren, die dinge sind wesentlich anders. Als Beispiel, und GDB, man könnte ein Programm Schritt für Schritt verfolgen (als Beispiel, eine Codezeile gleichzeitig oder ein logischer Codeblock, oder Verwenden von Haltepunkten im Code). Trotz dieses, diese Schritte werden ausgeführt während Laufzeit, während strace das Programm als Ganzes ausführt, bis ein Fehler auftritt oder bis es abgeschlossen ist.
Der Techniker oder Benutzer kann den gesamten Datensatz analysieren (textbasiert), suche nach interessanten Saiten, etc. Zur selben Zeit, GDB würde es zusätzlich ermöglichen, Signale und Anrufe an das System zu sehen, auch wenn die Konfiguration und Analyse wesentlich komplexer ist als bei strace
.
Kon strass, Sie können das Programm einfach in ausführen strace
(Mit anderen Worten strace some_program
), und obwohl dies ungefähr dasselbe ist wie GDB, die Bedienung unterscheidet sich deutlich, wie zuvor beschrieben.
In Bezug auf die Menge an Informationen, die in einer Spur zu sehen sind, es ist gut, einen Schritt zurückzutreten und sich daran zu erinnern, woher die meisten Computerprobleme kommen: Vollständige Festplatte, erschöpfte Erinnerung, keine Datei gefunden, Falscher Eingang, etc.
Besonders in Plattenzugriffsbereichen, strace
glänzt wirklich. So zeichnet es alle Systemaufrufe auf, jeder Festplattenzugriff ist in der Registry gut sichtbar. Wieder, kann nach relevanten Textzeichenfolgen und Dateinamen suchen, auch wenn du das bedenkst, manchmal, Ketten können in der Länge gekürzt werden, daher kann nur eine Teilausgabe sichtbar sein.
Zusammenfassend, wenn wir uns qualifizieren müssten strace
als Debugging-Tool und / oder Fehlerbehebung und weisen Sie ihm einen Platz in einer neueren oder kompetenteren Linux-Toolbox zu, dann, in beiden Fällen, Die Lösung ist ungefähr in der Mitte, auch wenn es eher auf Fehlersuche als auf Debugging ausgerichtet ist. Lass uns installieren strace
Nächste.
VERBUNDEN: Wie Logikgatter funktionieren: ODER, UND, XOR, NOCH, NAND, XNOR und NICHT
installieren strace
Installieren strace auf Ihrer Debian-basierten Linux-Distribution / Geeignet (wie Ubuntu und Mint), Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sudo apt install strace
Installieren strace auf Ihrer RedHat-basierten Linux-Distribution / Yum (wie RHEL, Centos und Fedora), Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sudo yum install strace
Verwenden von strace
Nach der Installation strace
, es ist ganz einfach zu starten. Wir können, als Beispiel, Verfolgen Sie das Linux sleep
Befehl / Dienstprogramm:
schlaf 1
Sofort, das Ergebnis beweist die obige Aussage. Es gibt eine Fülle von Informationen über alle Maßnahmen der (sehr) einfach sleep 1
Befehl, das, Letztendlich, nur Aktionen schlafen für eine einzige Sekunde.
Schauen wir uns einige Dinge an, die wir sofort beobachten können:
betreten("/etc/ld.so.preload", R_OK) = -1 ENOENT (Keine solche Datei oder Ordner)
Das sehen wir kurz nach dem Start, das Programm hat versucht einzugeben (Auf der Festplatte) einordnen /etc/ld.so.preload
. Wir können auch sehen, dass dies fehlgeschlagen ist (-1 status
), da die Datei nicht gefunden wurde (ENOENT
) mit beschreibender Fehlermeldung No such file or directory
.
Nur diese eine Startlinie könnte zu weiteren Untersuchungen führen. Als Beispiel, Wir können unsere Lieblingssuchmaschine scannen und nach der Datei suchen /etc/ld.so.preload
es ist / tut und was passiert, wenn ein Programm es nicht finden kann, sowie wie wir es installieren können.
Wie du siehst, wenn ich eine Software laufen lasse / komplexeres Programm in strace
, es ist möglich, dass es entdeckt, dass es versucht, eine Datei einzugeben, als Beispiel, eine freigegebene Datei .so
Bibliothek und ich kann sie nicht finden. Leicht zu analysieren und wahrscheinlich leicht zu beheben dank strace
.
Nächste, wir sehen die conf.d
binärer Cache, der erfolgreich geöffnet wird als schreibgeschützt (O_RDONLY
), mit dem close-on-exec-Flag (Wird in Multithread-Programmen verwendet, um Race-Bedingungen zu vermeiden) O_CLOEXEC
Satz von Flaggen:
Offen(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
Auch wenn Sie nicht wissen, was jedes Element bedeutet, eine einfache Online-Suche liefert schnell Informationen zu jedem spezifischen Begriff oder Wort, die Ihnen helfen wird, die präsentierten Informationen zu verstehen und was passiert.
Besonders interessant ist auch diese Zeile gegen Ende:
+++ verlassen mit 0 +++
Dies zeigt an, dass das Programm mit dem Exit-Code erfolgreich beendet wurde. 0
. Ein Exit-Code von 0 zeigt im Allgemeinen die erfolgreiche Ausführung und Beendigung von Linux-Programmen an.
Wie Sie an den obigen Beispielen sehen können, Es ist leicht zu sehen, was ein Programm mit macht strace
. Sie können jede Zeile und sogar jedes Wort in jeder Zeile analysieren und, häufig, Es braucht eine Suchmaschine, um Licht ins Dunkel zu bringen. Trotz dieses, sogar ein Blick auf die Ausgabe eines abstürzenden Programms kann ausreichen, um die genaue Ursache zu finden und zu beheben., und vor allem wenn, als Beispiel, eine erforderliche Datei fehlt, etc.
VERBUNDEN: Wie sich Linux-Runlevel auf laufende Dienste auswirken
Sekundärprozessüberwachung
Wenn Sie verwenden strace
, manchmal wird es so aussehen strace
Es verfolgt nicht alle Systemaufrufe des Programms korrekt, etc. Dies könnte einfach daran liegen, dass das zu verfolgende Programm gestartet wurde / mehrere untergeordnete Prozesse gestartet, als Beispiel, beim Verzweigen von Kindprozessen.
Es ist einfach, diese untergeordneten Prozesse in die strace-Erfassung einzubeziehen: füge einfach die hinzu -f
Befehlszeilenoption (Mit anderen Worten, strace -f your_program
), und auch alle Anrufe an das System werden verfolgt, usw., aller untergeordneten Prozesse.
Ende
In diesem Beitrag, wir haben die besprochen strace
Werkzeug, die verwendet werden kann, um jedes Programm oder jede Anwendung zu verfolgen, die auf einem Linux-basierten Computer ausgeführt wird.
Nach der Installation des Tools, wir können das Programm einfach und direkt unter starten strace
und genießen Sie das hohe Maß an Fehlerbehebungs- und Debugging-Informationen, die strace
Wrapper wird uns präsentieren.