Купил сегодня вентилятор для малины (raspberry pi) на 12v и только потом понял, что на борту платы есть лишь 3v и 5v. Короче собрал из старого и нового один рабочий, взлетело, хорошо быть инженером.



Ладно, давай про 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 красивым, как на картинке, читай это.



tags: #bash #linux #debug



💩 @bashdays