AllInfo

So verwenden Sie strace, um Systemaufrufe und -signale zu verfolgen

Die Verfolgung eines Computerprogramms ist nicht nur denjenigen vorbehalten, die über den Quellcode verfügen , kann es lesen und weiß, wie man einen Debugger verwendet. Jeder Linux-Benutzer kann eine ausführbare Datei mit strace verfolgen. Finden Sie heraus, wie!

Was ist strace?

strace ist ein Linux-Dienstprogramm, mit dem Sie die Systemaufrufe einer bestimmten Anwendung verfolgen können. Es nimmt auch Signale auf und erzeugt eine detaillierte Ausgabe aller beobachteten Informationen.

Eine Person, die neu in der Verfolgung und Verfolgung im Allgemeinen ist, könnte sich fragen, warum dies hilfreich ist. Ein professioneller IT-Ingenieur könnte sich fragen, wie viel Information Strace wirklich aufnehmen kann, besonders wenn er weiß, wie viel von einem Debugger wie GDB abgefragt werden kann.

RELATEDFunktionsweise von Linux-Signalen: SIGINT, SIGTERM und SIGKILL

Wenn Sie daran interessiert sind, Computercode und -programme zu debuggen, lesen Sie unseren Artikel Debugging mit GDB: Erste Schritte.

In beiden Fällen gibt es gute Neuigkeiten! Das Verfolgen aller Systemaufrufe und -signale liefert ein umfassendes Bild der Funktionsweise eines Programms und ist ein hervorragendes Tool zur Fehlerbehebung und sogar zum Debuggen. Darüber hinaus läuft es während der Laufzeit (als Wrapper-Prozess), kann jedoch leicht in eine Protokolldatei zurückverfolgt werden und bietet einen leicht verständlichen Überblick über die Aktionen eines Programms.

Vergleicht man dies mit GDB, die ebenfalls ein Wrapper-Prozess ist, liegen die Dinge wesentlich anders. In GDB könnte man beispielsweise ein Programm Schritt für Schritt verfolgen (z. B. eine Codezeile nach der anderen oder einen logischen Codeblock—oder durch die Verwendung von Breakpoints im Code). Solche Schritte werden jedoch während ausgeführt, während strace das Programm einfach als Ganzes ausführt, bis ein Fehler auftritt oder bis zum Abschluss.

Der Techniker oder Benutzer kann dann das vollständige (textbasierte) Protokoll analysieren, nach interessanten Zeichenfolgen suchen usw. Außerdem würde GDB es ermöglichen, auch Signale und Systemaufrufe zu sehen, obwohl die Einrichtung und Analyse desselben viel mehr ist komplexer als mit strace.

Mit strace können Sie das Programm einfach unter strace ausführen (dh strace some_program), und obwohl dies ungefähr dasselbe ist wie GDB, unterscheidet sich die Bedienung erheblich, wie oben beschrieben.

Was die Informationsmenge angeht, die aus einem Trace eingesehen werden kann, ist es gut, einen Schritt zurückzugehen und sich daran zu erinnern, woher die meisten Computerprobleme kommen—Festplatte voll, Speicher erschöpft, einige Dateien wurden nicht gefunden , falsche Eingaben usw.

Gerade im Bereich des Festplattenzugriffs glänzt strace wirklich. Da es alle Systemaufrufe aufzeichnet, ist jeder Plattenzugriff im Protokoll gut sichtbar. Auch hier können Sie nach relevanten Textzeichenfolgen und Dateinamen suchen. Beachten Sie jedoch, dass die Länge von Zeichenfolgen manchmal verkürzt werden kann, sodass nur die Teilausgabe sichtbar ist.

Zusammenfassend lässt sich sagen, dass die Antwort in beiden Fällen ungefähr in der Mitte liegt, wenn wir strace entweder als Debugging- und/oder Troubleshooting-Tool bewerten und ihm einen Platz in einer neueren oder kompetenteren Linux-Toolbox zuweisen müssten. i>, obwohl es eher zur Fehlerbehebung als zum Debuggen tendiert. Als nächstes installieren wir strace.

VERWANDTE: Funktionsweise von Logic Gates: OR, AND, XOR, NOR, NAND, XNOR und NOT

Installieren von strace

So installieren Sie straceFühren Sie auf Ihrer Debian/Apt-basierten Linux-Distribution (wie Ubuntu und Mint) den folgenden Befehl in Ihrem Terminal aus:

sudo apt install strace

So installieren Sie strace Führen Sie auf Ihrer RedHat/Yum-basierten Linux-Distribution (wie RHEL, Centos und Fedora) den folgenden Befehl in Ihrem Terminal aus:

sudo yum install strace

Verwenden von strace

Nach der Installation von strace ist der Einstieg recht einfach. Wir können zum Beispiel den Linux-Befehl sleep/das Dienstprogramm verfolgen:

strace sleep 1

Die Ausgabe beweist sofort die oben gemachte Aussage. Es gibt eine Fülle von Informationen zu allen Aktionen, die der (sehr) einfache Befehl sleep 1 ausführt, der immerhin nur Aktionen für eine einzige Sekunde schlafen lässt.

Schauen wir uns an an ein paar Dingen, die wir sofort beobachten können:

access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)

Wir können sehen, dass das Programm kurz nach dem Start versucht hat, auf die Datei /etc/ld.so.preload (auf der Festplatte) zuzugreifen. Wir können auch sehen, dass dies fehlgeschlagen ist (-1 Status), da die Datei nicht gefunden wurde (ENOENT) mit der beschreibenden Fehlermeldung No such file or directory.

Nur diese einzelne Zeile der Ausgabe könnte zu weiteren Forschungen führen. Zum Beispiel können wir unsere bevorzugte Suchmaschine danach durchsuchen, was die Datei /etc/ld.so.preload ist/macht und was passiert, wenn ein Programm sie nicht findet, sowie darauf, wie wir sie installieren können.< /p>

Wie Sie sehen, könnten Sie, wenn Sie eine kompliziertere Software/ein komplizierteres Programm unter strace ausführen würden, möglicherweise feststellen, dass es versucht, auf eine Datei zuzugreifen, z ;finde es nicht. Es ist leicht zu analysieren und wahrscheinlich dank strace leicht zu beheben.

Als nächstes sehen wir, wie der binäre Cache conf.d erfolgreich als schreibgeschützt (O_RDONLY) geöffnet wird, mit das close-on-exec-Flag (wird in Multithread-Programmen verwendet, um Race-Bedingungen zu vermeiden) O_CLOEXEC-Flag gesetzt:

openat(AT_FDCWD, “/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC) = 3

Selbst wenn man nicht weiß, was die einzelnen Elemente bedeuten, liefert eine einfache Online-Suche schnell Informationen zu jedem spezifischen Begriff oder Wort, das einem hilft, die präsentierten Informationen zu verstehen und zu verstehen, was passiert.

Besonders interessant ist auch diese Zeile gegen Ende:

+++ exited with 0 +++ < p>Dies zeigt an, dass das Programm erfolgreich mit dem Exit-Code 0 beendet wurde. Ein Exit-Code von 0 zeigt im Allgemeinen eine erfolgreiche Ausführung und Beendigung in Linux-Programmen an.

Wie Sie an den obigen Beispielen sehen können, ist es einfach, sehen Sie, was ein Programm tut, indem Sie strace verwenden. Jede Zeile und sogar jedes Wort in jeder Zeile kann analysiert werden, und oft ist eine Suchmaschine erforderlich, um etwas Licht ins Dunkel zu bringen. Es kann jedoch sogar ausreichen, die Ausgabe eines fehlgeschlagenen Programms zu überblicken, um die genaue Ursache zu finden und zu beheben, insbesondere wenn beispielsweise eine erforderliche Datei fehlt usw.

RELATED : Wie Linux-Runlevel laufende Dienste beeinflussen

Untergeordnete Prozesse verfolgen

Bei der Verwendung von strace scheint es manchmal, dass stracestra nicht alle Systemaufrufe des Programms korrekt verfolgen usw. Dies könnte einfach daran liegen, dass das verfolgte Programm eine Reihe von untergeordneten Prozessen initiiert/gestartet hat, beispielsweise durch Forking untergeordneter Prozesse.

Es ist einfach, diese untergeordneten Prozesse in die strace-Erfassung einzubeziehen: Fügen Sie einfach die Option -f in die Befehlszeile ein (dh strace -f Ihr_Programm), und alle Systemaufrufe usw. aller untergeordneten Prozesse werden ebenfalls ausgeführt verfolgt.

Zusammenfassung

In diesem Artikel haben wir das strace-Tool besprochen, das verwendet werden kann, um Spuren von jedem Programm zu erstellen oder Anwendung, die auf einem Linux-basierten Computer ausgeführt wird.

Nach der Installation des Tools können wir das Programm einfach und direkt unter strace starten und das hohe Maß an Fehlerbehebungs- und Debugging-Informationen genießen, die das s Trace Wrapper wird uns präsentieren.

Exit mobile version