strace
13 commands
13 shown
Трассировать новый процесс
Запустить команду под strace и сохранить вывод в файл
strace -o trace.log ls /tmp
Подключиться к процессу
Трассировать системные вызовы уже запущенного процесса
strace -p $(pgrep nginx | head -1) -o /tmp/nginx.trace
Трассировать только конкретные syscall
Фильтровать только syscall связанные с файлами
strace -e trace=openat,read,write curl https://example.com
Статистика syscall
Сводная таблица количества и времени системных вызовов
strace -c -e trace=all python3 app.py
Следовать за дочерними процессами
Трассировать syscall во всех дочерних процессах
strace -f -e trace=process nginx -t
Показать временны́е метки
-tt добавляет абсолютное время; -T — время каждого вызова
strace -tt -T curl https://example.com 2>&1 | head -40
Трассировать доступ к файлам
Найти файлы которые процесс пытается открыть но не находит
strace -e trace=openat -e trace=file myapp 2>&1 | grep 'ENOENT'
Трассировать сетевые syscall
Захватить все сетевые системные вызовы
strace -e trace=network,socket curl https://example.com 2>&1 | grep -v '^---'
Сводка по числу syscall
Сводит число и время syscall по форкам, сортируя по времени; находит дорогой вызов
strace -c -f -S time -p <pid>
Расшифровка fd с таймингом
Показывает пути/сокеты за fd плюс длительность и метки времени для файловых операций
strace -yy -T -tt -e trace=%file -p <pid>
Стек на каждый syscall
Печатает стек на каждый openat, чтобы найти кто открывает файл; нужны debug-символы
strace -k -e trace=openat -f -p <pid>
Инъекция ошибок syscall
Заставляет 3-й openat падать с ENOENT для проверки обработки ошибок; chaos-тест без кода
strace -f -e inject=openat:error=ENOENT:when=3 -p <pid>
Трассировка доставленных сигналов
Показывает только сигналы (SIGTERM/SIGCHLD), пропуская syscall; отлаживает загадочные kill. прим.: ltrace для вызовов библиотек
strace -f -e signal=all -e trace=none -p <pid>
no commands match