如何跟踪 Mac OS X 中程序的系统调用?

How to trace system calls of a program in Mac OS X?

我想跟踪 find 命令 进行的系统调用,但是我不知道如何在 Mac OS X Yosemite。我怎样才能像 strace 在 FreeBSD 上所做的那样跟踪任意程序的系统调用?我对跟踪文件系统相关调用特别感兴趣。

你可以像

一样使用dtruss
sudo dtruss find ~/repo -depth 2 -type d -name '.git'

该实用程序的 manual page 将帮助您根据需要定制该工具的使用。

在当前版本的 macOS 下,无法跟踪 SIP 覆盖路径(如 /usr/bin)下的可执行文件。

您可以通过在您的主目录中制作可执行文件的副本并跟踪该副本来绕过此问题:

cp /usr/bin/find find
codesign --remove-signature ./find
sudo dtruss ./find …

您需要从新的 find 可执行文件中删除代码签名,否则 SIP 仍会注意到正在访问系统文件(来源:@Anmol Singh Jaggi)。