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
文件,不知道为什么)
这么长的故事试图激发我最初的问题:我如何才能像在 linux 中dtrace
那样以普通用户权限运行我的命令?strace
编辑:似乎我不是唯一一个想知道如何做到这一点的人:问题#1204256与我的几乎相同(并且具有相同的次优 sudo 答案:-)