Есть ли эквивалент того, что делает -T
и -U
вариант truss
утилиты Solaris в Linux.
Они должны указывать системный вызов ( -T
) или библиотечную функцию ( -U
), которая при вызове отслеживаемым приложением приведет к его остановке.
Или, в противном случае, я бы хотел, чтобы любой процесс, запущенный отслеживаемым приложением, был остановлен (как если бы он был уничтожен SIGSTOP), как только он выполняет заданный системный вызов или заданный вызов функции совместно используемой библиотеки.
strace
и ltrace
в Linux предоставляют большую часть возможностей Solaris truss
, но, похоже, они этого не делают.
Например:
truss -f -T open cmd
Было бы похоже, strace -f cmd
за исключением того, что если выполняющийся процесс cmd
или какой-либо из его потомков выполняет какой-либо open
системный вызов, он будет немедленно остановлен (и я могу возобновить его позже, когда мне будет удобно)
В некоторых случаях я мог использовать gdb
s catch syscall
, но я искал решение, которое могло бы удобно следовать за вилками и продолжать делать это для всех разветвленных процессов и продолжать делать это даже после execve
s.
Кажется, я вспоминаю какую-то утилиту, предоставляющую такую же функциональность, даже одну (или опции для той же утилиты), для одношаговых приложений между некоторыми вхождениями некоторого системного вызова, как это удаленно, но моя память подводит меня, я даже не могу быть уверен, это было в Linux.
follow-exec-mode
), я экспериментирую с этим. Строго не отвечает на вопрос, но может быть достаточно для того, что мне нужно.
truss
.