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 .