Купил сегодня вентилятор для малины (Raspberry Pi) на 12 V и только потом понял, что на борту платы есть лишь 3 V и 5 V. Короче, собрал из старого и нового один рабочий, взлетело, хорошо быть инженером.
Ладно, давай про strace. Сегодня научимся смотреть, что запускает программа и с какими параметрами она это запускает.
Возьмём для испытаний программу man и распотрошим её.
Команда man позволяет получить доступ к общей базе справки по команде, функции или программе. Обычно для просмотра справки программе надо передать название команды или другого объекта в системе.
Екзекутим такую штуку:
strace -o logs -s1024 -fe execve man bash
Ага, запустилось. Перед тобой открылась страница помощи Bash. Что дальше? Дальше нажимаешь клавишу q, всё это дело закрывается.
Давай теперь по ключам, а потом уже разберёмся, что произошло.
s= длина выводимой строкиf= отслеживаем дочерние процессыe= какой системный вызов отслеживаемo= куда сохраним результаты трассировки
Если не указывать ключ o, то результаты запишутся в стандартный поток STDERR.
И чо? А ничо, давай смотреть результаты, которые записались в файл с именем logs.
cat logs

На экран вывелись результаты трассировки команды man. На картинке к этому посту можешь посмотреть результат.
man для распаковки и форматирования man-страниц.То есть ты можешь отдебажить свою собственную программу, которая запускает какие-то внешние утилиты и т. п., и посмотреть, что конкретно она запускает и с какими параметрами. Я так недавно PHP дебажил, который запускал FFmpeg из скрипта.
Ладно, пойду дальше пиво пить. Не отвлекаю, увидимся!
UPD: Кстати, чтобы сделать cat красивым, как на картинке, читай это.








Комментарии