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
以普通用户权限运行我的命令,就像在linux中strace
一样?
编辑:看起来我不是唯一一个想知道如何做到这一点的人:问题#1204256基本上和我的问题一样(并且有相同的次优sudo答案:-)