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

在Windows下编写DTrace脚本的注意事项

有些人(比如我自己)习惯在Windows下编写DTrace脚本,然后上传到服务器去执行。但是由于Windows和Unix的文件格式不一样(回车,换行之类的问题),会导致执行脚本不成功。举例来说,我在Windows下编写了DTrace脚本,然后在Solaris执行,就会出现下面的错误:

root@Solaris # ./test.d
: No such file or directory

解决方法是要把脚本转化成Unix格式。我平时习惯用Notepad++,在Notepad++的”编辑->档案格式转换”里就有选项,你可以选择把文件转成Windows或Unix格式。

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[......]

阅读全文