作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
代码
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); }'
如何知道 args[0]->b_count 意味着系统调用字节
最佳答案
作为documentation解释说,对于系统调用提供程序的入口探测,arg0
、arg1
等是系统调用的参数本身。对于 syscall::read:entry
,然后,查看 read(2)
手册页显示
ssize_t read(int fildes, void *buf, size_t nbyte);
因此 arg0
是 fildes
的值。
不幸的是,官方文档中似乎没有描述 fds[]
。 fds[]
是 DTrace 提供给 translate 的类似于子例程的东西。一个文件描述符到 fileinfo_t
. fileinfo_t
是一个稳定的结构,可提供有关文件的有用信息,而不会向用户公开实现细节。
io provider 的文档指出,对于 io:::start
,args[0]
是指向 struct buf
的指针。这是另一个文档错误:它实际上是指向 struct bufinfo
的指针,在同一页上有描述。
关于linux - 如何在 dtrace 中查找参数均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840154/
我是一名优秀的程序员,十分优秀!