Gibt es eine Entsprechung zu den Funktionen -T
und der -U
Option des truss
Solaris-Dienstprogramms unter Linux?
Diese sollen einen Systemaufruf ( -T
) oder eine Bibliotheksfunktion ( -U
) angeben, die beim Aufrufen durch die verfolgte Anwendung zum Anhalten führen würde.
Andernfalls möchte ich, dass jeder Prozess, der von einer verfolgten Anwendung gestartet wird, gestoppt wird (als würde er von SIGSTOP abgebrochen), sobald ein bestimmter Systemaufruf oder ein bestimmter Funktionsaufruf einer gemeinsam genutzten Bibliothek ausgeführt wird.
strace
und ltrace
unter Linux bieten sie einen Großteil der Funktionen von Solaris truss
, aber sie scheinen dies nicht zu tun.
Zum Beispiel:
truss -f -T open cmd
Wäre so strace -f cmd
, als würde der Prozess, der ausgeführt wird, cmd
oder einer seiner Nachkommen einen open
Systemaufruf ausführen , sofort gestoppt (und ich kann ihn später nach Belieben fortsetzen).
In einigen Fällen könnte ich gdb
‚s catch syscall
, aber ich war auf der Suche nach einer Lösung , die Gabeln bequem folgen kann und weiterhin für alle die gegabelten Prozesse tun und behalten sie auch nach tun execve
s.
Ich erinnere mich an ein Hilfsprogramm, das dieselbe Funktionalität bietet, sogar an ein (oder mehrere) Hilfsprogramm (e) für Einzelschrittanwendungen zwischen einigen Ereignissen eines solchen Systemaufrufs, aber mein Gedächtnis versagt mir, ich kann nicht einmal sicher sein das war unter Linux.
follow-exec-mode
) folgen kann , damit experimentiere ich. Beantwortet die Frage nicht unbedingt, kann aber gut genug für das sein, was ich brauche.truss
Manpage hinzugefügt .Antworten:
Soweit ich weiß , ist dies mit
strace
derptrace
Funktion, die intern verwendet wird,SIGSTOP
oderSIGINT
bei Anrufen nicht möglich.BEARBEITEN:
Ich habe diese einfache Lösung in Ministrace eingefügt , sodass keine Codierung erforderlich ist.
Meine vorgeschlagene Lösung, wenn nicht alle Funktionen von strace benötigt werden, wäre, die Ministrace zu modifizieren - die ich hier gefunden habe. Schreiben Sie sich eine Strace in 70 Codezeilen .
In einem One-Shot-Programm können Sie zwei Zeilen vor dem folgenden Code einfügen:
Pseudocode:
Ich habe nichts davon überprüft, diese letzten Schritte bleiben Ihnen überlassen.
quelle
Systemtap sollte in der Lage sein, das zu tun, wonach Sie suchen, das ist eine nette Anleitung dafür:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
quelle