oracle函数调取,使用dtrace跟踪oracle函数调用

以前用gdb跟踪过oracle的一些函数调用,今天找了本dtrace的书看了看。

dtrace比gdb的能力强大多了,而且简单了很多。

语法基本是 awk + C,做了3个例子,继续研究

gdb的例子请看:

Tracing Oracle Internal Calls

http://space.itpub.net/?uid-8242091-action-viewspace-itemid-676943

****************************************************************

1.跟踪逻辑读取的块。

****************************************************************

#!/usr/sbin/dtrace -s

#pragma D option quiet

struct arg {

int32_t arg0;

int32_t arg1;

int32_t arg2;

int32_t arg3;

};

struct arg *arg;

pid$1::kkspsc0:entry{

i=0;

}

pid$1::kcbgtcr:entry{

i++;

arg=(struct arg *)copyin(arg0,sizeof(arg));

printf("%5d %s:%s:%s:%s 0x%08x[%d,%d]\n",i,probeprov,probemod,probefunc,probename, arg->arg1,arg->arg1>>22,arg->arg1&0x3fffff);

}

bash-3.2# ./aaa.d 2068

1 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]

2 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]

3 pid2068:oracle:kcbgtcr:entry 0x010000ab[4,171]

4 pid2068:oracle:kcbgtcr:entry 0x010000ac[4,172]

5 pid2068:oracle:kcbgtcr:entry 0x010000ad[4,173]

6 pid2068:oracle:kcbgtcr:entry 0x010000ae[4,174]

7 pid2068:oracle:kcbgtcr:entry 0x010000af[4,175]

8 pid2068:oracle:kcbgtcr:entry 0x010000b0[4,176]

9 pid2068:oracle:kcbgtcr:entry 0x010000b1[4,177]

10 pid2068:oracle:kcbgtcr:entry 0x010000b2[4,178]

11 pid2068:oracle:kcbgtcr:entry 0x010000b3[4,179]

12 pid2068:oracle:kcbgtcr:entry 0x010000b4[4,180]

13 pid2068:oracle:kcbgtcr:entry 0x010000b5[4,181]

14 pid2068:oracle:kcbgtcr:entry 0x010000b6[4,182]

15 pid2068:oracle:kcbgtcr:entry 0x010000b7[4,183]

16 pid2068:oracle:kcbgtcr:entry 0x010000b9[4,185]

17 pid2068:oracle:kcbgtcr:entry 0x010000ba[4,186]

18 pid2068:oracle:kcbgtcr:entry 0x010000bb[4,187]

19 pid2068:oracle:kcbgtcr:entry 0x010000bc[4,188]

20 pid2068:oracle:kcbgtcr:entry 0x010000bd[4,189]

21 pid2068:oracle:kcbgtcr:entry 0x010000be[4,190]

22 pid2068:oracle:kcbgtcr:entry 0x010000bf[4,191]

23 pid2068:oracle:kcbgtcr:entry 0x010000c0[4,192]

24 pid2068:oracle:kcbgtcr:entry 0x010000c1[4,193]

25 pid2068:oracle:kcbgtcr:entry 0x010000c2[4,194]

26 pid2068:oracle:kcbgtcr:entry 0x010000c3[4,195]

27 pid2068:oracle:kcbgtcr:entry 0x010000c4[4,196]

28 pid2068:oracle:kcbgtcr:entry 0x010000c5[4,197]

****************************************************************

2.跟踪latch的获取和释放

****************************************************************

SELECT LOWER(addr)||','||NAME||','||'C'||child#||','||latch#||','||level# FROM v$latch_children

UNION ALL

SELECT LOWER(addr)||','||NAME||','||'P'||','||latch#||','||level# FROM v$latch

#!/usr/sbin/dtrace -s

#pragma D option quiet

#pragma D option destructive

pid$1::kslgetl:entry,pid$1::kslfre:entry{

printf("%s:%s:%s:%s\t", probeprov,probemod,probefunc,probename);

system("grep %x latchlist.txt",arg0);

}

bash-3.2# ./aaa.d 2068

pid2068:oracle:kslfre:entry     000000009e4a3748,session idle bit,C2,14,1

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     000000009e4a3748,session idle bit,C2,14,1

pid2068:oracle:kslfre:entry     000000009e4a3748,session idle bit,C2,14,1

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslgetl:entry    00000000601069d8,shared pool,C1,307,7

pid2068:oracle:kslfre:entry     00000000601069d8,shared pool,C1,307,7

****************************************************************

3.函数调用栈

****************************************************************

#!/usr/sbin/dtrace -s

#pragma D option quiet

pid$1::*:entry{

printf("%s.%s.%s", probemod,probefunc,probename);

ustack();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值