Czy istnieje odpowiednik działania -T
i -U
opcji truss
narzędzia Solaris w systemie Linux.
Służą one do określenia funkcji systemowej ( -T
) lub funkcji bibliotecznej ( -U
), która wywołana przez śledzoną aplikację spowoduje jej zatrzymanie.
Lub, inaczej mówiąc, chciałbym, aby każdy proces uruchamiany przez śledzoną aplikację został zatrzymany (tak jakby został zabity przez SIGSTOP), jak tylko wykona dane wywołanie systemowe lub wywołanie funkcji biblioteki współużytkowanej.
strace
a ltrace
w systemie Linux zapewniają większość funkcji systemu Solaris truss
, ale wydaje się, że nie robią tego.
Na przykład:
truss -f -T open cmd
Byłoby tak strace -f cmd
, gdyby proces wykonujący cmd
lub którykolwiek z jego potomków wykonał jakieś open
wywołanie systemowe, zostałoby natychmiast zatrzymane (i mogę wznowić je później według mojej wygody)
W niektórych przypadkach mogłem użyć gdb
's' catch syscall
, ale szukałem rozwiązania, które może wygodnie śledzić rozwidlenia i kontynuować robienie tego dla wszystkich rozwidlonych procesów i kontynuować to nawet po execve
s.
Wydaje mi się, że pamiętam jakieś narzędzie, które daje tę samą funkcjonalność, nawet jedną (lub opcje tego samego narzędzia) dla aplikacji jednoetapowych między niektórymi wystąpieniami niektórych syscall zdalnie tak, ale moja pamięć mnie zawodzi, nawet nie jestem pewien to było na Linuksie.
follow-exec-mode
), eksperymentuję z tym. Nie odpowiada ściśle na pytanie, ale może być wystarczająco dobry na to, czego potrzebuję.truss
podręcznika Solaris .Odpowiedzi:
Zgodnie z moją najlepszą wiedzą nie można tego zrobić za
strace
pomocąptrace
funkcji używanej wewnętrznieSIGSTOP
lubSIGINT
podczas połączeń.EDYTOWAĆ:
Wstawiłem to proste rozwiązanie do ministrace , więc kodowanie nie jest wymagane.
Moim proponowanym rozwiązaniem, jeśli nie jest wymagana cała funkcjonalność strace, byłoby zmodyfikowanie ministrace - co znalazłem tutaj Napisz sobie strace w 70 liniach kodu .
W programie One Shot można dodać dwie linie przed następującym kodem:
Pseudo kod:
Nic z tego nie powiedziałem, te ostatnie kroki należy do ciebie.
źródło
Systemtap powinien być w stanie zrobić to, czego szukasz, to dobry poradnik:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
źródło