Есть ли эквивалент того, что делает -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
.Ответы:
Насколько мне известно, это не может быть сделано с
strace
помощьюptrace
функции, которая используется для внутренних целейSIGSTOP
илиSIGINT
по вызовам.РЕДАКТИРОВАТЬ:
Я вставил это простое решение в Ministrace , поэтому кодирование не требуется.
Мое предлагаемое решение, если требуется не вся функциональность strace, было бы изменить ministrace - что я нашел здесь. Напишите себе strace из 70 строк кода .
В одной программе вы можете добавить две строки перед следующим кодом:
Псевдокод:
Я не говорил ничего из этого, эти последние шаги оставлены вам.
источник
Systemtap должен уметь делать то, что вы ищете, это хорошее руководство для этого:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
источник