Using SystemTap with PHP DTrace Static Probes

Using SystemTap with PHP DTrace Static Probes
52jyhcc
52jyhcc
9
阅读
0
评论
2022年01月14日13:42:47 0 9

Using SystemTap with PHP DTrace Static Probes

On some Linux distributions, the SystemTap tracing utility can beused to trace PHP's static DTrace probes. This is available withPHP 5.4.20 and PHP 5.5. 

Installing PHP with SystemTap

Install the SystemTap SDT development package: 

# yum install systemtap-sdt-devel

Install PHP with the DTrace probes enabled: 

# ./configure --enable-dtrace ...

# make

Listing Static Probes with SystemTap

The static probes in PHP can be listed using stap: 

# stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'

This outputs: 

process("sapi/cli/php").provider("php").mark("compile__file__entry")

process("sapi/cli/php").provider("php").mark("compile__file__return")

process("sapi/cli/php").provider("php").mark("error")

process("sapi/cli/php").provider("php").mark("exception__caught")

process("sapi/cli/php").provider("php").mark("exception__thrown")

process("sapi/cli/php").provider("php").mark("execute__entry")

process("sapi/cli/php").provider("php").mark("execute__return")

process("sapi/cli/php").provider("php").mark("function__entry")

process("sapi/cli/php").provider("php").mark("function__return")

process("sapi/cli/php").provider("php").mark("request__shutdown")

process("sapi/cli/php").provider("php").mark("request__startup")

SystemTap with PHP Example

Example #1 all_probes.stp for tracing all PHP Static Probes with SystemTap

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {

    printf("Probe compile__file__entry\n");

    printf("  compile_file %s\n", user_string($arg1));

    printf("  compile_file_translated %s\n", user_string($arg2));

}

probe process("sapi/cli/php").provider("php").mark("compile__file__return") {

    printf("Probe compile__file__return\n");

    printf("  compile_file %s\n", user_string($arg1));

    printf("  compile_file_translated %s\n", user_string($arg2));

}

probe process("sapi/cli/php").provider("php").mark("error") {

    printf("Probe error\n");

    printf("  errormsg %s\n", user_string($arg1));

    printf("  request_file %s\n", user_string($arg2));

    printf("  lineno %d\n", $arg3);

}

probe process("sapi/cli/php").provider("php").mark("exception__caught") {

    printf("Probe exception__caught\n");

    printf("  classname %s\n", user_string($arg1));

}

probe process("sapi/cli/php").provider("php").mark("exception__thrown") {

    printf("Probe exception__thrown\n");

    printf("  classname %s\n", user_string($arg1));

}

probe process("sapi/cli/php").provider("php").mark("execute__entry") {

    printf("Probe execute__entry\n");

    printf("  request_file %s\n", user_string($arg1));

    printf("  lineno %d\n", $arg2);

}

probe process("sapi/cli/php").provider("php").mark("execute__return") {

    printf("Probe execute__return\n");

    printf("  request_file %s\n", user_string($arg1));

    printf("  lineno %d\n", $arg2);

}

probe process("sapi/cli/php").provider("php").mark("function__entry") {

    printf("Probe function__entry\n");

    printf("  function_name %s\n", user_string($arg1));

    printf("  request_file %s\n", user_string($arg2));

    printf("  lineno %d\n", $arg3);

    printf("  classname %s\n", user_string($arg4));

    printf("  scope %s\n", user_string($arg5));

}

probe process("sapi/cli/php").provider("php").mark("function__return") {

    printf("Probe function__return: %s\n", user_string($arg1));

    printf(" function_name %s\n", user_string($arg1));

    printf("  request_file %s\n", user_string($arg2));

    printf("  lineno %d\n", $arg3);

    printf("  classname %s\n", user_string($arg4));

    printf("  scope %s\n", user_string($arg5));

}

probe process("sapi/cli/php").provider("php").mark("request__shutdown") {

    printf("Probe request__shutdown\n");

    printf("  file %s\n", user_string($arg1));

    printf("  request_uri %s\n", user_string($arg2));

    printf("  request_method %s\n", user_string($arg3));

}

probe process("sapi/cli/php").provider("php").mark("request__startup") {

    printf("Probe request__startup\n");

    printf("  file %s\n", user_string($arg1));

    printf("  request_uri %s\n", user_string($arg2));

    printf("  request_method %s\n", user_string($arg3));

}

The above script will trace all core PHP static probe pointsthroughout the duration of a running PHP script: 

# stap -c 'sapi/cli/php test.php' all_probes.stp

余额充值 点赞(0)
weinxin
账号+金额发此微信
充值后请把会员账号/用户名+充值金额发送到此微信:tourism52
历史上的今天
01月
18
小白,教你,JavaScript,入门,小白,教你,JavaScript, 菜鸟教程

小白教你JavaScript入门

小白教你JavaScript入门 一.首先,我们来了解一下 1.JavaScript是什么? JavaScript是一种小型的、轻量级的、面向对象的、跨平台的客户端脚本语言。 Ja...
在同,一个,文件,定义,多个,命名,空间 菜鸟教程

在同一个文件中定义多个命名空间

在同一个文件中定义多个命名空间也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。 Example #1 定义多个命名空间,简单组合语法&...
allba,k 回调,类型 菜鸟教程

Callback 回调类型

Callback 回调类型自 PHP 5.4 起可用 callable 类型指定回调类型 callback。本文档基于同样理由使用 callback 类型信息。 一些函数...
WMLScript,parseFloat,函数,WMLScript,parseFloat,函数, 菜鸟教程

WMLScript parseFloat() 函数

WMLScript parseFloat() 函数 parseFloat() 函数返回由一个字符串定义的浮点数。 解析会在第一个不能作为浮点值解析的字符上结束。 语法 n = La...
jquery,参考,手册,属性 菜鸟教程

jQuery 参考手册 - 属性

jQuery 属性下面列出的这些方法设置或返回元素的 CSS 相关属性。属性描述context在版本 1.10 中被弃用。包含传递给 jQuery() 的原始上下文。jquery包...

Comment list 共有 0 条评论

暂无评论