免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3704 | 回复: 0
打印 上一主题 下一主题

dtrace 小脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-03 16:53 |只看该作者 |倒序浏览
1. dtrace 跟踪用户程序中的函数如printf。
#include
void hello(char * a,int i)
{
        printf("%s\n",a);
}
void main()
{
        while(1)
        {
         hello("1",2);
         sleep(1);
        }
}
将程序编译成a.out并运行。然后运行dtrace -qn 'printf:entry { printf("%s:%s:%s:%s\n",probeprov,probemod,probefunc,probename);}'
并没有任何输出结果。
但是将脚本改为dtrace -qn 'pid1123::printf:entry { printf("%s:%s:%s:%s\n",probeprov,probemod,probefunc,probename);}' 后此处
1123是a.out的进程号。然后就可以输出了。中途改脚本,继续运行上面的脚本还会继续跟踪1123进程。但是不知道什么时候fbt           
genunix                            printf entry会生效。
2. dtrace 跟踪结构体
b.h头文件。
#pragma pack(1)
struct a{
        int i;
        char *a;
        short j;
        char b[10];
};
//b.c主程序。
#include
#include"b.h"
#include
void hello(struct a *p)
{
printf("%d\t%d\n",p,&p);
sleep(1);
}
void main()
{
        struct a b;
        while(1){
                b.i=10;
                strcpy(b.b,"wanjm");
                b.j=11;
                hello(&b);
        }
}
//b.d脚本
#pragma D option quiet
#include "b.h"
struct  a *p; /*只能在外面生命变量.另外包含头文件需要用-I参数指明头文件的路径.还需要-C,以c processor进行预处理.*/
pid$1::hello:entry{
//由于dtrace工作于内核空间,为了访问用户态数据,必须先进行拷贝,才可以访问.
        p=copyin(arg0,sizeof(struct a));
        printf("%s\n",p->b);
}
dtrace -s scriptname。
3.关于dtrace中函数名参数的初步认识。arg0~9是对应该函数的9的参数,但是该参数都是二进制的,表示数值或地址。所以需要求得该变量的
内容需要将其作为地址,并将其中的内容拷贝到内核中才可以看到。如果该参数正好是数值,则没有必要这么做了,对浮点数还没有把握。
4.dtrace中有一个内置变量fds,是一个数组,以文件描述符为索引,可以得到该描述符所指的文件信息。
#!/usr/sbin/dtrace -qs
syscall::write*:entry
/fds[arg0].fi_pathname==$1/
{
        printf("uid:%d %s %s\n",uid,execname,fds[arg0].fi_pathname);
}
此处的$1是文件的全路径. 如果路径中有链接,需要恢复. 如写文件/omp-data/log.txt. 由于/omp-data-> /omp/omp-data.所以实际$1还是等
于/omp/omp-data/log.txt
详细可以搜索dtrace fds
5. dtrace跟踪一个进程打开了哪些文件?
dtrace -n  'open:entry/pid==945/{printf("%d opend %s\n",pid,copyinstr(arg0));}'
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1380/showart_2085532.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP