如何在dtrace中查找参数

代码

dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }' dtrace: description 'syscall::read:entry ' matched 1 probe ^C bash /proc/1709/psinfo 1 loader /zp/space/f2 1 nscd /etc/user_attr 1 bash /export/home/mauroj/.bash_history 2 loader /zp/space/f3 2 nscd /etc/group 2 su /etc/default/su 8 su /devices/pseudo/sy@0:tty 9 bash /dev/pts/5 66 Xorg /devices/pseudo/conskbd@0:kbd 152 gnome-terminal /devices/pseudo/clone@0:ptm 254 

dtrace代码fds[arg0].fi_pathname

如何查看dtrace调用参数是什么意思,我尝试使用

 trace -lv 'syscall:fds:read:entry' |head ID PROVIDER MODULE FUNCTION NAME 1 dtrace BEGIN Probe Description Attributes Identifier Names: Stable Data Semantics: Stable Dependency Class: Common Argument Attributes Identifier Names: Stable 

但找不到论据? 如何看待这些问题的意思? 例如fds[arg0].fi_pathname

再举一个例子:

  dtrace -n 'io:::start { @bytes = quantize(args[0]->b_bcount); }' 

如何知道参数[0] – > b_count表示系统调用字节

Solutions Collecting From Web of "如何在dtrace中查找参数"

正如文档解释的那样,对于系统调用提供者的入口探测器, arg0arg1等是系统调用的参数本身。 对于syscall::read:entry ,然后,看看read(2)手册页显示

  ssize_t read(int fildes, void *buf, size_t nbyte); 

所以arg0fildes的值。

不幸的是, fds[]似乎没有在官方文档中描述。 fds[]是类似于子例程的东西,DTrace提供将文件描述符转换为fileinfo_tfileinfo_t是一个稳定的结构,提供有关文件的有用信息,而不会将实现细节公开给用户。

io提供程序的文档声明,对于io:::startargs[0]是指向struct buf的指针。 这是另一个文档错误:它实际上是一个指向struct bufinfo的指针,它在同一页面上描述。