1. 查看函数参数的方法
直接使用 $变量名即可。
probe kernel.function("do_mmap_pgoff")
       printf("%s(%d) %s (%s)\n",execname(),pid(),$pgoff,$len)
}2. 查看结构体成员变量
直接结构体变量名->成员名即可,如
probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        printf("%s(%d) %x\n",execname(),pid(),$info->node)
}如果结构体是void指针,则需要使用@cast接口进行强制转换,如
struct fb_info {
...
	void *par;
...
}
probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        p = @cast($info->par, "struct psb_fbdev")->pfb
	printf("%s(%d) %d\n",execname(),pid(),p)
}如果还要继续访问其中的void指针指向的成员,则需要继续进行类型转换,如
probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
 	p = @cast(@cast($info->par, "struct psb_fbdev")->psb_fb_helper->dev->dev_private, "struct drm_psb_private")->pg->stolen_size
	printf("%s(%d) %d\n",execname(),pid(),p)
}3. 查看函数参数及返回结果
probe process("./test").function("testB").return {
        printf("arg:%s ret:%s\n",$$parms, $$return$)
}4. 编写自定义函数
%{ 
   #include <linux/netdevice.h>
%}
private function show_dev:string(skb:long) %{
   struct sk_buff *skb;
   struct net_device *dev;
   skb = (struct sk_buff *)STAP_ARG_skb;
   dev = skb->dev;
   if (dev)
       STAP_RETURN(dev->name);
   else
       STAP_RETURN("unknown");
%}
probe kernel.function("__netif_receive_skb_core").label("drop"){
      printf("0x%04X, net is: %s\n", ntohs($skb->protocol), show_dev($skb));
} 