1 Star2 Stars3 Stars4 Stars5 Stars (1评分, 平均分: 5.00)
Loading...

使用DTrace追踪C程序时常用的probe和参数总结

下面的表格总结了使用DTrace追踪C程序时常用的probe和参数,由于有些约定俗成的词汇翻译成中文反而让人觉得别扭,所以就保留英文了:

描述
probe
参数

user function entry
pid$target:segment:fun:entry
arg0..argN:函数参数

user function return
pid$target:segment:fun:return
arg0:函数返回时汇编指令位置
arg1:函数返回值

kernel function entry
fbt:module:fun:en[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

为什么DTrace没有流程控制语句?

在2008年的DTrace讨论邮件里,我找到了这个话题:“can i use if/else/for/while in dtrace script?”?而针对这一问题,Chip Bennett给出了如下的解释:
(1)没有循环语句的原因是:clause作为kernel线程运行时是关中断的,所以一旦循环运行很长时间甚至出现死循环状况,就会给系统带来很大影响;
(2)没有if/else语句(同样也是没有循环语句的另一个原因)是因为:每个clause必须产生固定长度的trace记录,即如果一个clause第一次产生了300byte的trace记录,那么接下来每次都会产生300byte。流程控制语[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...
1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTrace tricks and tips (4) – copyin()函数不是跨clause安全的

Max Burning的这篇文章:《Bruning Questions: How To DTrace poll(2) System Calls》(http://www.joyent.com/blog/bruning-questions-how-to-dtrace-poll-2-system-calls)归根到底的结论就是:copyin()函数所返回的内存空间只在当前clause有效,不能跨clause使用(“copyin() data goes into scratch space which is not saved across clauses.”)。
所以针对下面的代码:

pid[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (1评分, 平均分: 4.00)
Loading...

使用DTrace诊断gdb问题

前一段时间,小编由于工作需要,在Solaris上安装使用了最新的gdb(7.7.1),结果在使用中发现了两个问题:
(1)“set follow-fork-mode child”这个命令不生效,但是在Linux下面是可以的;
(2)64位gdb不能分析32位core dump文件。
小编把这两个问题报给了gdb的维护者,结果是石沉大海,毫无动静。后来小编转念一想,为什么不试着用DTrace自己分析一下呢?说干就干,小编立即动手写脚本开始分析,结果没费多少功夫,就查到了原因。小编觉得这个经历很有趣,就把这个过程记录下来,写成了一篇英文文章:
Use DTrace to diagnose[……]

阅读全文