如何使用dtrace查看读写调用(包括隐藏字符,如\n)

如何使用dtrace查看读写调用(包括隐藏字符,如\n),c,bash,macos,dtrace,C,Bash,Macos,Dtrace,我是dtrace的新手,以前有过Linux strace跟踪默认情况下所需一切的奢侈体验。 如何从正在运行的C程序中获取跟踪读写调用,以便在dtrace上工作 我在这里看到了答案:,但这并不能完全帮助我 我添加了一个printf语句, 使用当前代码:sudodtrace-n'syscall::read:entry,syscall::write:entry/pid==10325/{printf(“%s”,copyinstr(arg1));}',其中pid是我要跟踪的进程 但是,这会将其打印为字符串

我是dtrace的新手,以前有过Linux strace跟踪默认情况下所需一切的奢侈体验。 如何从正在运行的C程序中获取跟踪读写调用,以便在dtrace上工作

我在这里看到了答案:,但这并不能完全帮助我

我添加了一个printf语句, 使用当前代码:
sudodtrace-n'syscall::read:entry,syscall::write:entry/pid==10325/{printf(“%s”,copyinstr(arg1));}'
,其中pid是我要跟踪的进程

但是,这会将其打印为字符串,而不是字节形式。是否有方法查看整个内容,包括隐藏字符,如\r和\n? 这就是strace的做法


此外,write:entry在大约150-200个字符之后似乎会切断输出,有没有办法禁用或增加该限制?

您可以使用
%S
(大写字母S),它应该打印出所有不可打印的字符,例如
\r
\n
,作为转义序列。不过,它仍然会在第一个0
char
值处停止。谢谢,这应该足以满足大多数基本的跟踪需求。写:由于某种原因,在打印了大约200-300个字符后,条目似乎也被截断了。@AndrewHenle想把它作为答案发布吗?