Как убить strace, не убивая отслеживаемый процесс?

Я пытаюсь отладить запуск приложения. Я хотел бы использовать strace для получения трассировки системных вызовов, выполняемых приложением во время его запуска, но после запуска приложения мне не нужны накладные расходы на производительность strace.

Если вы запускаете strace в обычном режиме:

strace -f myprogram

затем, если вы попытаетесь убить strace, он унесет с собой myprogram.

Вы можете присоединить strace к запущенному процессу следующим образом:

strace -f -p <myprogram pid>

но тогда трудно получить след запуска приложения.

Есть ли способ зафиксировать трассировку запуска приложения, а затем отсоединить strace?


person davidg    schedule 15.02.2015    source источник


Ответы (1)


Один из методов заключается в использовании флага -D для strace, который запускает процесс strace как потомок трассируемого процесса.

Например:

strace -f -D myprogram

начнет отслеживать myprogram. Сейчас работает:

killall strace

убьет процесс strace, но myprogram продолжит работу.

person davidg    schedule 15.02.2015
comment
Вы также можете запустить приложение, а затем подключить strace с помощью strace -p <PID>. Очевидно, что это не будет отслеживать запуск приложения, но может быть удобно для других вещей, таких как включение трассировки во время этого тестового HTTP-запроса. - person BraveNewCurrency; 16.02.2015