Как отслеживать системные вызовы программы в Mac OS X

Мне хотелось проследить системные вызовы, сделанные командой find чтобы отладить некоторые проблемы с производительностью, однако я не мог понять, как это сделать это на Mac OS X Yosemite. Как я могу отслеживать системные вызовы для произвольной программы, аналогично тому, что делает strace для FreeBSD? Мне особенно интересно отслеживать связанные с файловой системой вызовы.

Ответ 1

Вы можете использовать dtruss, как в

sudo dtruss find ~/repo -depth 2 -type d -name '.git'

справочная страница этой утилиты поможет вам адаптировать использование инструмента к вашим потребностям.

Ответ 2

В текущих версиях macOS исполняемые файлы в рамках путей, охватываемых SIP (например, /usr/bin), не могут быть прослежены.

Вы можете обойти это, сделав копию исполняемого файла в своем домашнем каталоге и отслеживая копию:

cp /usr/bin/find find
sudo dtruss ./find …