Probevue - AIX 6 新的程序员工具
2008-09-06 08:21:57 来源:WEB开发网第二个示例包含从函数返回的代码
#!/usr/bin/probevue
@@BEGIN
{
int read(int fd, void *buf, int n); <-- Declare function so ProbeVue understands it
int bad;
int good;
}
@@syscall:*:read:exit
when(__rv == -1) <-- __rv means the return value
{
bad++;
}
@@syscall:*:read:exit
when(__rv != -1)
{
good++;
}
@@interval:*:clock:1000 <-- Once a second output counter
{
printf("Reads good=%d bad=%dn",good,bad);
good=0;
}
以下是上面脚本的一些示例输出,我专门运行了一个程序来生成一些磁盘 I/O。注意:当程序尝试从无效的文件描述符(即未使用 open() 函数初始化文件描述符)进行读取时,将生成不良 I/O:# ./goodandbad.e
Reads good=0 bad=0
Reads good=55 bad=0
Reads good=0 bad=0
Reads good=0 bad=0
Reads good=57 bad=1
Reads good=0 bad=1
Reads good=0 bad=1
Reads good=55 bad=1
Reads good=0 bad=1
Reads good=1 bad=1
Reads good=55 bad=1
Reads good=40 bad=1
Reads good=1 bad=2
Reads good=55 bad=3
Reads good=1 bad=3
Reads good=0 bad=3
Reads good=56 bad=4
第三个示例监视用户程序
我使用一个小程序生成了很多 CUP 工作。此程序调用了 ncpu,其中包含函数“engine()”,此函数耗尽了 CPU 上的 CPU 时钟周期。以下脚本用于研究此函数的使用情况。注意:此程序已经编译并在运行,并且它包括符号表,probevue 使用此符号表来查找函数入口和出口点(即未剥离)。probevue 脚本包括用于输出所能找到的程序和环境的详细信息的 probevue 函数:#!/usr/bin/probevue
double engine(int p1, int p2);
@@uft:$1:*:engine:entry
{
printf("PID=%d TID=%d PPID=%d PGID=%d UID=%d GID=%d InKernel=%dn", __pid,
__tid, __ppid, __pgid, __uid, __euid, __kernelmode);
printf("ProgName=%s errno=%dn", __pname, __errno);
printf("---n");
stktrace(GET_USER_TRACE,-1);
printf("+++n");
stktrace(PRINT_SYMBOLS|GET_USER_TRACE,-1);
}
更多精彩
赞助商链接