gpt4 book ai didi

linux - 如何在 dtrace 中查找参数均值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:12 37 4
gpt4 key购买 nike

代码

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解释说,对于系统调用提供程序的入口探测,arg0arg1 等是系统调用的参数本身。对于 syscall::read:entry,然后,查看 read(2) 手册页显示

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

因此 arg0fildes 的值。

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

io provider 的文档指出,对于 io:::startargs[0] 是指向 struct buf 的指针。这是另一个文档错误:它实际上是指向 struct bufinfo 的指针,在同一页上有描述。

关于linux - 如何在 dtrace 中查找参数均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840154/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com