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