Купил сегодня вентилятор для малины (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. На картинке к этому посту можешь посмотреть результат.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Вот таким образом мы узнали, какие утилиты и с какими аргументами запускает программа man для распаковки и форматирования man-страниц.

То есть ты можешь отдебажить свою собственную программу, которая запускает какие-то внешние утилиты и т. п., и посмотреть, что конкретно она запускает и с какими параметрами. Я так недавно PHP дебажил, который запускал FFmpeg из скрипта.

Ладно, пойду дальше пиво пить. Не отвлекаю, увидимся!

UPD: Кстати, чтобы сделать cat красивым, как на картинке, читай это.