【发布时间】:2011-03-01 18:35:35
【问题描述】:
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 文件现在由根:-)
然后我尝试了dtruss -f sudo -u myusername gcc hello.c,但这感觉有点不对劲,而且无论如何都不起作用(我一直没有得到a.out 文件,不知道为什么)
所有这些长篇大论都试图激发我最初的问题:我如何让dtrace 以普通用户权限运行我的命令,就像strace 在 linux 中所做的那样?
编辑:似乎我不是唯一一个想知道如何做到这一点的人:问题#1204256 与我的几乎相同(并且具有相同的次优 sudo 答案:-)
【问题讨论】: