GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann Strace/ptrace ein Programm zum Absturz bringen?

Kürzlich habe ich mit jemandem über Strace gesprochen, und sie fragten, was passieren würde, wenn Sie einen laufenden Prozess straceen würden, während er einen Netzwerk-Socket oder etwas Ähnliches erstellt. Könnte dies dazu führen, dass das Programm auf unerwartete Weise abstürzt?

Nach dem, was ich über ptrace, den von strace verwendeten Systemaufruf, gelesen habe, sollte es nicht in der Lage sein, so etwas zu verursachen, wenn Sie nur einen Thread debuggen. Der Prozess wird jedes Mal gestoppt, wenn ein Systemaufruf aufgerufen wird, aber er sollte später fortgesetzt werden und nicht klüger sein. Signale werden in die Warteschlange gestellt, während es nicht läuft, also gehe ich davon aus, dass etwas Ähnliches mit syscalls/sockets/listen passiert.

Kann ptrace im Kontext von strace irgendwelche merkwürdigen Prozessabstürze verursachen?

Akzeptierte Antwort:

Nein , strace sollte keinen Programmabsturz verursachen –

Außer in diesem etwas ungewöhnlichen Fall:

Wenn es einen Fehler hat, der vom Zeitpunkt der Ausführung abhängt , oder Speicherorte zur Laufzeit .

Es kann diese Art von "Heisenbug" auslösen “ – aber extrem selten, weil diese Art von Fehler selten ist und nur unter Strace oder anderen Instrumenten ausgelöst werden muss.
Und wenn Sie einen Heisenbug finden, ist das oft eine gute Sache.

Bezüglich ptrace() – der Systemaufruf – das ist genau das, was strace ist drinnen denke ich, also ist es ähnlich. Man kann einfach mehr tun als strace kann, wenn ptrace() verwendet wird direkt.

Ihr Beispiel wäre genau diese Art von Fehler:

Im Beispiel strace würde das Timing der Schritte zum Herstellen einer Netzwerkverbindung ändern. Wenn das ein Problem verursacht, war es ein „Problem, das darauf wartet, passiert zu werden“ – der Zeitpunkt der Ausführung ändert sich ständig. Mit strace , ein klein wenig mehr. Aber jede andere Anwendung hätte das Timing stärker ändern können, wie das Starten eines Programms.


Linux
  1. kann ein programm seinen eigenen elfabschnitt lesen?

  2. Wie kann ich mit dem Fenstermanager ein Programm als root starten?

  3. Wie kann ich eine Dump-Datei eines laufenden Prozesses in Linux erstellen?

  4. Warum können Sie CD-Audio nicht einfach wie eine gewöhnliche Daten-CD hinzufügen?

  5. Kann mprotect() verwendet werden, um die Berechtigungen von .rodata zu ändern?

So verfolgen Sie die Programmausführung mit dem Linux-Strace-Befehl

Shell-Programm, um einfach einen Zeichentreiber zu öffnen und zu warten?

7 Strace-Beispiele zum Debuggen der Ausführung eines Programms unter Linux

Was kann dazu führen, dass SIGHUP erzeugt wird?

Was kann eine „Ressource vorübergehend nicht verfügbar“ beim Befehl sock send() verursachen

Kann ein Programm erkennen, dass es unter sudo ausgeführt wird?