Network programming 在dtrace中将参数打印到内核函数
我需要调试Solaris内核模块,特别是提取通过引用传递给内核函数的结构中的数据Network programming 在dtrace中将参数打印到内核函数,network-programming,solaris,dtrace,systemtap,Network Programming,Solaris,Dtrace,Systemtap,我需要调试Solaris内核模块,特别是提取通过引用传递给内核函数的结构中的数据 msg_recv(sk_buff *skbp, uint_t link, uchar_t* src) { pkt_hdr_t *pkt; pkt = (pkt_hdr_t *)skbp->data; port = pkt->port; } 我在linux中编写了一个systemtap脚本来访问参数和提取数据 如何使用针对solaris模块的DTRACE实现这一点 我试着
msg_recv(sk_buff *skbp, uint_t link, uchar_t* src)
{
pkt_hdr_t *pkt;
pkt = (pkt_hdr_t *)skbp->data;
port = pkt->port;
}
我在linux中编写了一个systemtap脚本来访问参数和提取数据
如何使用针对solaris模块的DTRACE实现这一点
我试着查看系统并尝试了一些命令,但这就是我对dtrace的全部了解:
[root@vcssx247-ldm7 ~]#dtrace -l | grep msg_recv
7090 fbt mymod msg_recv1 entry
7091 fbt mymod msg_recv1 return
7548 fbt mymod msg_recv entry
7549 fbt mymod msg_recv return
DTrace在概念上类似于SystemTap(实际上,随着SystemTap的出现,反之亦然):
kernel.function("xxx") -> fbt:genunix:xxx:return
module("mod").function("xxx") -> fbt:mod:xxx:entry
module("mod").function("xxx").return -> fbt:mod:xxx:return
arg0
。arg9
变量,其中包含uintptr\t
参数值),因此访问是完全不同的:
print($skpb->sk_field) -> trace(args[0]->sk_field)
print("%32m", $src) -> tracemem(arg2, 32)
print($skpb->sk_field) -> trace(args[0]->sk_field)
print("%32m", $src) -> tracemem(arg2, 32)