OS X缺乏linux的strace ,但是它有更好的dtrace 。 但是,我错过了对单个命令进行简单跟踪的能力。 例如,在linux上,我可以编写strace -f gcc hello.c来引导所有的系统调用,它给了我编译器编译我的程序所需的所有文件名的列表(优秀的memoize脚本是build立在这个技巧之上的) 我想在Mac上移植memo,所以我需要一些strace 。 我真正需要的是gcc读取和写入的文件列表,所以我需要的是更多的truss 。 果然,我可以说dtruss -f gcc hello.c并获得相同的function,但是编译器是以root权限运行的,这显然是不受欢迎的(除了存在巨大的安全风险外,还有一个问题是a.out文件现在由root拥有:-) 然后我尝试了dtruss -f sudo -u myusername gcc hello.c ,但是这样感觉有点不对,而且无论如何也无法正常工作(这时我没有得到a.out文件,不知道为什么) 所有那些长篇故事试图激发我原来的问题: 我如何让dtrace以普通的用户权限运行我的命令,就像strace在linux中一样? 编辑:似乎我不是唯一一个想知道如何做到这一点:问题#1204256是几乎相同,我的(并具有相同的不理想的sudo答案:-)
我用strace简单地附加到一个过程。 该进程创build了90个线程。 当我发现有问题的线程时,我不得不单调地search父线程,然后是祖父线程,一直到根进程。 有没有一个技巧或工具来快速找出哪个线程创build另一个线程? 或者更好的是,像pstree一样打印线程创build树?
我试图用strace来找出一个程序使用execve执行的命令。 这些命令中的一些参数是相当长的,strace是execve缩写(我在大约30个字符之后看到“…”),从而阻止我得到任何有用的信息。 我怎样才能得到每个参数的全文? 我已经阅读了手册页 。 -v选项打印环境,这很有用,但参数仍然被截断。 strace -f -e trace=execve -v -p 1234 我也尝试过传递verbose = all,但是这只是提供了一些关于SIGCHLD的额外信息。 strace -f -e verbose=all trace=execve -v -p 1234
这对debugging很有用(因此编程相关)。 在linux上,我们可以使用这个命令 strace -feopen python myfile.py 找出哪些python模块和共享对象被加载。 在macOS X上有相当于一行吗?
一位同事曾经告诉我,当Linux上所有的东西都debugging失败的时候,最后一个select是使用strace 。 我试图学习这个奇怪的工具背后的科学,但我不是一个系统pipe理员大师,我真的没有得到的结果。 所以, 这究竟是什么,它是做什么的? 应该如何以及在何种情况下使用? 应如何理解和处理输出? 简言之,这个东西是如何工作的?
我正在寻找一个相当于Systrace的Windows或至lessstrace 。 我知道StraceNT ,但想知道是否有更多的select。 具体来说,我正在寻找一种以编程方式强制执行系统调用策略的具体方式,尽pipe这可能是事后而不是主动阻止它们。 目前有没有一种好的方法呢?