快捷搜索:

ProbeVue 简介

纵然对付老练的法度榜样员和系统治理员,利用法度榜样开拓和故障扫除也是艰巨的义务。纵然有了最好的调试器,法度榜样员无意偶尔候仍旧盼望用简单的打印语句反省利用法度榜样正在履行的操作。IBM® AIX® V6 增添了一种新的调试对象,ProbeVue。本文简要先容 ProbeVue 的用法以及相关联的编程和脚本说话,并经由过程一个简单的示例法度榜样演示 ProbeVue 的用途和潜在代价。

简介

ProbeVue 这种跟踪对象应用户可以动态地跟踪正在运行的法度榜样。ProbeVue 的主要接口是 VUE 说话。VUE 既是编程说话,也是脚本说话。VUE 说话与 C 说话和 AIX 可用的脚本说话相似。

VUE 语法

ProbeVue 脚本的基础形式与布局优越的 C 法度榜样和 awk 脚真相似。VUE 脚本文件的一样平常形式如下:Variable definitions

Begin {

}

Probe clauses

End {

}

变量部分

在变量部分中定义全局变量。与 C 说话一样,可以在文件中的其它地方指定临时变量。VUE 支持以下变量类型:

C-89 数据类型(包括有符号和无符号)short、int、long、long long、float 和 double。对付浮点变量的操作只限于简单的赋值表达式和作为 VUE 函数的变量。

String 数据类型代表字符串字面值。例如,String fooString[20] 声明一个长度为 20 的字符串字面值。只需用 fooString = “My String” 初始化 fooString。可以应用 + 操作符连接多个字符串字面值。

List 数据类型表示一组整数类型的值。例如,fooList = list() 创建 List fooList。应用 append 函数在 fooList 中添加值:append( fooList, value ),此中的 value 可所以另一个列表或整数变量。除了 append 函数之外,List 数据类型还支持 avg() 函数(谋略列表的匀称值)、min() 函数(判断列表中的最小值)、max() 函数(判断列表中的最大年夜值)和 count() 函数(返回列表的大年夜小,即列表中的条款数量)。

probev_timestamp_t 是一种特殊的数据类型,用来从 VUE 光阴戳函数返回值。返回的值采纳 AIX 内部款式。

情况变量

在情况变量名称前面加上 $(美元)符号,就可以在 VUE 脚本中应用情况变量。在默认环境下,情况变量存储整数值。要想包管通报字符串,情况变量必须用双引号定义变量:export MYENV=”123” 通报字符串 123,而 export MYENV=123 通报整数值一百二十三。

除了通报情况变量之外,VUE 还支持几个内置的情况变量:

__CPID 是 ProbeVue 敕令创建的子进程的进程 ID。

__CPTID 是线程 ID。

Begin 部分

begin 部分是 VUE 脚本顶用来履行变量初始化的部分。在脚本开始履行时调用这个部分,而且只履行一次。

探测子句(Probe clauses)

探测子句部分包孕法度榜样逻辑。法度榜样员在这个部分中定义各个探测点。下一节具体评论争论各类探测类型,这些探测类型包括系统调用、用户函数和内部。

探测类型

Probevue 供给以下探测类型:

系统调用探测

用户函数探测

内部探测

系统调用探测

系统调用探测(即 syscall 探测)用来探测 libc 库和内核中的函数。可以为函数调用的进入或退出定义探测。系统调用探测的一样平常形式如下:@@syscall:

::

此中:

是要探测的进程(例如,123675 或表示所有进程的 *)

是要探测的系统调用(例如,read)

对函数调用的进入履行探测

对函数调用的退出履行探测

经由过程应用系统调用探测,可以在 VUE 脚本中应用输入参数和返回值。为了造访输入参数,VUE 脚本必须声明要探测的函数的函数原型。例如:int read( int fd, char *buf, unsigned long size );

指定这一行,VUE 脚本就能够造访 fd、buf 和 size 参数。应用一个特殊的内置变量 __arg3 捕捉函数的返回值。

用户函数探测

用户函数探测利用于利用法度榜样代码级探测。用户函数探测的一样平常形式如下:   @@uft:

:*::entry

此中:

process_ID 是要探测的可履行法度榜样的进程 ID

function_name 是要探测其进入的用户函数

与系统调用探测不合,用户函数探测必须指定一个进程 ID,而且只能探测函数的进入。

内部探测

内部探测因此必然的光阴距离履行的探测。内部探测的一样平常形式如下:   @@interval:*:clock:

此中以 100ms 为单位定义光阴距离。

敕令语法

ProbeVue 敕令行供给各类选项。本文主要关注 ProbeVue 敕令的以下形式。后面的 ProbeVue 示例脚本也应用这种形式。probevue [ -X Program_name [ -A "Arguments_to_program" ] ]

[ Script_name [ Arguments_to_script ] ]

此中:

-X

启动一个法度榜样并在启动法度榜样之前启用探测。

-A

为应用 -X 标志指定的法度榜样指定参数。

Script_name

包孕要运行的 ProbeVue 脚本的文件。

指定 –X 选项,这会在指定的敕令履行时代运行 ProbeVue。ProbeVue 的这种用法有助于探测单一法度榜样。

系统调用探测示例

前面已经简要说清楚明了脚本语法和探测类型,现在来看一个应用系统调用探测的简单 ProbeVue 脚本。

清单 1:系统调用 ProbeVue 脚本示例

/* Function prototype for read in order to access input args */

int read( int fd, char *buf, unsigned long size );

String sFormat0[10];

String sFormat1[10];

String sLen[2];

@@BEGIN

{

/* Initialize printf format strings */

sLen = "9";

sFormat0 = "%" + sLen + "d,";

sFormat1 = "%" + sLen + "d," + "%" + sLen + "dn";

sFormat2 = "%" + sLen + "s,%" + sLen + "s,%" + sLen + "sn";

/* Print header */

printf( sFormat2, "Requested", "Actual", "Average" );

/* Create list to maintain rolling average */

rollingAvg = list();

}

/* Probe to print the size of the read buffer. */

@@syscall:*:read:entry

/* Only for the currently executing program. */

when ( $__CPID == __pid ) {

/* __arg3 represents the size of the read buffer. */

printf( sFormat0, __arg3 );

}

/* Probe to print the actual number of bytes read i.e. the return value from read. */

@@syscall:*:read:exit

/* Only for the currently executing program. */

when ( $__CPID == __pid ) {

/* Append return value (__rv) to list */

append( rollingAvg, __rv );

printf( sFormat1, __rv, avg( rollingAvg) );

}

@@END

{

}

显示数据

这个系统调用 ProbeVue 脚本示例的输出采纳 Microsoft® Excel® CSV(逗号分隔的值)款式。网络和款式化数据的要领数不胜数,但这个简单的脚本和款式可以获图利用法度榜样的信息,在曩昔,这必要经由过程利用法度榜样中的特定代码来实现。经由过程应用 ProbeVue,在利用法度榜样之外履行这个脚本的代码。下面是这个法度榜样的输出示例:probevue -X /usr/bin/tar -A "-cf /dev/null /scratch/bcobb/probevue" ./p2.e | tee t.csv

Requested

Actual

Average

4096

1703

1703

4096

0

851

4096

4096

1933

4096

1160

1739

4096

314

1454

4096

1865

1523

4096

575

1387

4096

575

1286

4096

371

1184

应用这个输出创建一个如下图所示的图表。

清单 1 系统调用 ProbeVue 脚本孕育发生的图表

停止语

本文从法度榜样员的角度简要先容了 AIX 对象集中的 ProbeVue。本文评论争论了 ProbeVue 的基础观点,包括 ProbeVue 脚本的一样平常形式、VUE 编程说话和一个简单但故意义的示例脚本。

您可能还会对下面的文章感兴趣: