92

我想跟踪find命令进行的系统调用以调试一些性能问题,但是我不知道如何在 Mac OS X Yosemite 上执行此操作。我如何跟踪任意程序的系统调用,类似于strace在 FreeBSD 上的作用?我对跟踪文件系统相关调用特别感兴趣。

4

2 回答 2

81

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

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

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

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

于 2017-10-17T20:53:17.877 回答
77

你可以使用dtruss

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

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

于 2015-06-25T08:54:10.273 回答