Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299746
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-11 15:53:09

 


第14 章• dtrace(1M) 实用程序189
-p 获取指定的进程ID pid,高速缓存其符号表,然后在完成时退出。如果命令行上
有多个-p 选项,则dtrace 将在所有命令退出后退出,并报告每个进程终止时的
退出状态。第一个进程ID 可供在命令行上(或使用-s 选项通过$target 宏变
量)指定的任何D程序使用。有关宏变量的更多信息,请参阅第15 章。
-P 指定要跟踪或列出的提供器名称(-l 选项)。其余的探测器说明字段(模块、
函数和名称)将留为空白,并且与任何探测器相匹配,无论这些字段中的值是
什么。可将可选D探测器子句用作-P 参数的后缀。在命令行上,一次可指定多
个-P 选项。
-q 设置静默模式。dtrace 将取消显示消息(如按指定选项和D程序相匹配的探测
器数目),并且将不列显列标题、CPU ID、探测器ID,也不会在输出中插入新
行。只有D程序语句(如trace() 和printf())跟踪并格式化的数据才会显示
在stdout 中。
-s 编译指定的D程序源文件。如果-e 选项存在,则将编译该程序,但不会启用任
何检测过程。如果-l 选项存在,则将编译该程序,并且会列出与其相匹配的一
组探测器,但不会启用任何检测过程。如果-e 和-l 都不存在,则将启用D程序
指定的检测过程并开始跟踪。
-S 显示D编译器中间代码。对于为每个D程序生成的中间代码,D编译器会将它
的报告生成到stderr。
-U 在调用cpp(1)(使用-C 选项启用)时取消定义指定的name。此选项将-U 选项传
递到每个cpp 调用。
-v 设置详细模式。如果指定了-v 选项,则dtrace 将生成程序稳定性报告,说明所
指定D程序的最低接口稳定性和相关性级别。DTrace 稳定性级别将在第39 章中
进一步地详细说明。
-V 报告dtrace 支持的最高D编程接口版本。版本信息将列显到stdout,然后
dtrace 命令将退出。有关DTrace 版本控制功能的更多信息,请参见第41 章。
-w 允许使用-s、-P、-m、-f、-n 或-i 选项在指定的D程序中执行破坏性操作。如
果未指定-w 选项,则dtrace 将不允许编译或启用包含破坏性操作的D程序。破
坏性操作在第10 章中进行详细说明。
-x 启用或修改DTrace 运行时选项或D编译器选项。第16 章中列出了这些选项。
将通过指定名称来启用布尔选项。将通过使用等号(=)分隔选项名称和值来设
置包含值的选项。
-X 指定符合在调用cpp(1)(使用-C 选项启用)选项时应选择的ISO C 标准的程
度。根据参数字母的值,-X 选项参数会影响__STDC__ 宏的值和存在性:
a(缺省值) ISO C 及K&R 兼容性扩展,包含ISO C 所需的语义更改。如果
未指定-X,则此模式为缺省模式。在将cpp 与-Xa 选项一起调
用时,预定义宏__STDC__ 具有值0。
c(符合) 严格符合ISO C(不包含K&R C 兼容性扩展)。将cpp 与-Xc 选
项一起调用时,预定义宏__STDC__ 具有值1。
选项
190 Solaris 动态跟踪指南• 2006 年7 月
s (K&R C) 仅K&R C。将cpp 与-Xs 选项一起调用时,不会定义宏
__STDC__。
t(转换) ISO C 及K&R C 兼容性扩展,不包含ISO C 所需的语义更改。
将cpp 与-Xt 选项一起调用时,__STDC__ 具有值0。
因为-X 选项仅影响D编译器调用C 预处理程序的方式,所以从D的角度看
来,-Xa 和-Xt 选项是等价的。提供这两个选项都是为了简化C 生成环境中设置
的重复使用。
无论-X 模式如何,始终会指定下列附加C 预处理程序定义,并且它们在所有模
式中有效:
 __sun
 __unix
 __SVR4
 __sparc(仅在SPARC® 系统上)
 __sparcv9(仅当在SPARC® 系统上编译64 位程序时)
 __i386(仅当在x86 系统上编译32 位程序时)
 __amd64(仅当在x86 系统上编译64 位程序时)
 __‘uname -s‘_‘uname -r‘(例如__SunOS_5_10)
 __SUNW_D=1
 __SUNW_D_VERSION=0xMMmmmuuu(其中,MM是十六进制的主发行版本
号,mmm是十六进制的次发行版本号,而uuu 是十六进制的微发行版本号
;有关DTrace 版本控制的更多信息,请参见第41 章)
-Z 允许与任何探测器都不匹配的探测器说明。在未指定-Z 选项时,如果在D程序
文件中(使用-s 选项)或在命令行上(使用-P、-m, -f、-n 或-i 选项)指定了
任何探测器说明,则dtrace 会报告错误并退出。
操作数
可在dtrace 命令行上指定零个或多个其他参数,来定义一组宏变量($1、$2 等),以在使
用-s 选项指定的或在命令行上指定的任何D程序中使用。宏变量的用法将在第15 章进一步
地说明。
操作数
第14 章• dtrace(1M) 实用程序191
退出状态
dtrace 实用程序将返回下列退出值:
0 成功完成了指定的请求。对于D程序请求,退出状态0 指示已成功编译程序,
并且已成功启用探测器,或者已成功检索匿名状态。即使指定的跟踪请求遇到
错误或删除,dtrace 也会返回0。
1 发生了致命错误。对于D程序请求,退出状态1 指示程序编译失败或者无法满
足指定的请求。
2 指定的命令行选项或参数无效。
退出状态
192 Solaris 动态跟踪指南• 2006 年7 月
脚本
您可以使用dtrace(1M) 实用程序在D程序之外创建与shell 脚本类似的解释程序文件,这些
文件可安装为可重用的交互式DTrace 工具。D编译器和dtrace 命令提供一组由D编译器扩
展的宏变量,使得创建DTrace 脚本更容易。本章介绍对宏变量工具的引用和创建持久性脚
本的技巧。
解释程序文件
与shell 和实用程序(如awk(1) 和perl(1))类似,可使用dtrace(1M) 创建可执行的解释程序
文件。解释程序文件的起始行格式如下所示:
#! pathname [arg]
其中,pathname 是解释程序的路径,arg 是单个可选参数。执行解释程序文件时,系统将
调用指定的解释程序。如果解释程序文件中指定了arg,则会将其作为参数传递到解释程
序。解释程序文件本身的路径和执行该文件时指定的任何其他参数,随后将附加到解释程
序参数列表。因此,将始终需要创建至少带有以下参数的DTrace 解释程序文件:
#!/usr/sbin/dtrace -s
执行解释程序文件时,-s 选项的参数将成为解释程序文件本身的路径名。然后dtrace 将读
取、编译和执行此文件,作用与在shell 中键入以下命令类似:
# dtrace -s interpreter-file
下列示例说明如何创建和执行dtrace 解释程序文件。键入以下D源代码,并将其保存在名
为interp.d 的文件中:
#!/usr/sbin/dtrace -s
BEGIN
15 第1 5 章
193
{
trace("hello");
exit(0);
}
将interp.d 文件标记为可执行文件,并按以下方式执行该文件:
# chmod a+rx interp.d
# ./interp.d
dtrace: script ’./interp.d’ matched 1 probe
CPU ID FUNCTION:NAME
1 1 :BEGIN hello
#
请记住,#! 指令必须是文件的前两个字符,中间或前面都不得有空格。D编译器在处理解
释程序文件时会自动忽略此行。
dtrace 使用getopt(3) 处理命令行选项,以便于将多个选项合并为单个解释程序参数。例
如,要将-q 选项添加到前面的示例中,可以将解释程序指令更改为:
#!/usr/sbin/dtrace -qs
如果指定多个选项字母,则必须始终用-s 选项结束布尔选项列表,以便将下一个参数(解
释程序文件名)作为与-s 选项对应的参数进行处理。
如果需要在解释程序文件中指定多个要求参数的选项,则不能将所有选项和参数放入单个
解释程序参数中。请改为使用#pragma D option 指令语法设置这些选项。所有dtrace 命令
行选项都有可以使用的#pragma 等效选项,如第16 章中所示。
解释程序文件
194 Solaris 动态跟踪指南• 2006 年7 月
宏变量
D编译器定义了一组内置的宏变量,可以在编写D程序或解释程序文件时使用这些变量。
宏变量是以美元符号($) 作为前缀的标识符,并在处理输入文件时由D编译器扩展一次。D
编译器提供了以下宏变量:
表15–1D宏变量
名称说明参考
$[0-9]+ 宏参数请参见第196 页中的“宏参数”
$egid 有效组ID getegid(2)
$euid 有效用户ID geteuid(2)
$gid 实际组ID getgid(2)
$pid 进程ID getpid(2)
$pgid 进程组ID getpgid(2)
$ppid 父进程ID getppid(2)
$projid 项目ID getprojid(2)
$sid 会话ID getsid(2)
$target 目标进程ID 请参见第198 页中的“目标进程
ID”
$taskid 任务ID gettaskid(2)
$uid 实际用户ID getuid(2)
除了$[0-9]+ 宏参数和$target 宏变量以外,所有宏变量都扩展为与系统属性(如进程ID
和用户ID)对应的整数。变量扩展为与当前dtrace 进程本身或正在运行D编译器的任何进
程关联的属性值。
通过在解释程序文件中使用宏变量,可以创建持久性的D程序,每次使用这些程序时无需
对其进行编辑。例如,要统计除dtrace 命令执行的系统调用以外的所有系统调用,可以使
用包含$pid 的以下D程序子句:
syscall:::entry
/pid != $pid/
{
@calls = count();
}
宏变量

以上文章转自于 : http://developers.sun.com.cn/

阅读(435) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~