一直以来没太注意“arg0...arg9
”和args[]
之间的区别,基本就是混用。前几天在调试一个DTrace
脚本时,才注意起来,也在DTrace
的mailing list
里讨论了一下。以下就是我做的一些总结:
(1) “arg0...arg9
”是64位整数类型。如果probe
有参数,都可以通过“[……]
一直以来没太注意“arg0...arg9
”和args[]
之间的区别,基本就是混用。前几天在调试一个DTrace
脚本时,才注意起来,也在DTrace
的mailing list
里讨论了一下。以下就是我做的一些总结:
(1) “arg0...arg9
”是64位整数类型。如果probe
有参数,都可以通过“[……]
前几天,同事提到商用系统上出现过使用kill
命令给进程发送SIGKILL
信号,进程无法退出的问题。尽管听起来有些不可思议,但是的确发生了。由于当时的环境没有保存下来,所以现在没法debug
。我考虑了一下,如果再发生,可以使用DTrace
去检查一下问题出现在哪里。
用kill
命令给进程发送信号可以分[……]
有时,我们需要使用DTrace
追踪程序的链接库的函数,这时module
名字就应该是链接库的名字。什么样的名字是有效的呢?让我做个实验验证一下。
我的程序链接了MySQL
的client
库,执行下面这些命令:
bash-3.2# dtrace -n 'pid$target::mysql_real[......]
使用DTrace
运行不带参数的命令很简单。假设程序名字叫“a
”,执行这个命令即可:“dtrace -n 'pid$target::sigaction:entry' -c ./a
”。如果程序需要参数(假设为“-x
”),如何运行呢?
试着执行如下命令:
bash-3.2# dtrace -n '[......]
在DTrace
中,profile provider
是一种特殊的provider
,这个provider
提供的probe
起到一种类似定时器的作用。它可以根据用户设置的频率周期性地触发,这样用户就可以定期地采集感兴趣的数据,汇总以后作分析。
Profile provider
提供两种probe
:profi[......]