OS X 缺少 linux 的 strace ,但它有 dtrace ,这应该好得多。

但是,我想念对单个命令进行简单跟踪的能力。例如,在 linux 上,我可以编写 strace -f gcc hello.c 来捕获所有系统调用,这为我提供了编译器编译我的程序所需的所有文件名的列表(优秀的 memoize 脚本就是建立在这个技巧之上的)

我想在 mac 上移植 memoize,所以我需要某种 strace 。我真正需要的是 gcc 读取和写入的文件列表,所以我需要更多的是 truss 。果然我可以说 dtruss -f gcc hello.c 并获得一些相同的功能,但是编译器以 root 权限运行,这显然是不可取的(除了巨大的安全风险,一个问题是 a.out 文件现在归 root 拥有:-)

然后我尝试了 dtruss -f sudo -u myusername gcc hello.c ,但这感觉有点不对,无论如何都不起作用(我一直没有 a.out 文件,不知道为什么)

所有的长篇故事都试图激发我最初的问题: 如何让 dtrace 以普通用户权限运行我的命令,就像 strace 在 linux 中一样?

编辑:似乎我不是唯一一个想知道如何做到这一点的人:问题 #1204256 与我的几乎相同(并且具有相同的次优 sudo 答案:-)

最佳答案

不是你的问题的答案,而是要知道的东西。 OpenSolaris 使用“特权”(部分)解决了这个问题 - 参见 this page 。即使在 OpenSolaris 中,也不可能允许没有任何额外权限的用户对他们自己的进程进行 dtruss。
原因是 dtrace 的工作方式 - 它在内核中启用探测器。因此,允许非特权用户探测内核意味着用户可以做很多不需要的事情,例如通过在键盘驱动程序中启用探针来嗅探其他用户的密码!

关于macos - 如何让 strace 以非 root 权限运行 strace 命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3007868/

10-14 00:44