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) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月29日

热门专题

APP开发|app开发_app开发公司_app软件开发_专业app开发_云南app开发公司_app定制_原生app开发定制
APP开发
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
云南综合高中|云南综合高中
云南综合高中
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
自考本科|自考本科有用吗,自考文凭,自考本科文凭,自考文凭有用吗,自考本科文凭有用吗,自考文凭承认吗
自考本科

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部