8.5.2 使用Xdebug跟踪代码执行
Xdebug的很多功能是以附加的调试语句的形式出现的,可以使用这些语句获得关于应用程序的附加信息。例如,可以查找到当前场景调用的类、方法或者函数,以及调用起始的文件和代码行。例如,代码清单8-8演示了一个简单的调用跟踪信息。
代码清单8-8 使用Xdebug跟踪调用栈
class MyClass {
public function myCaller($other) {
$other->myCallee();
}
}
class MyOther {
public function myCallee() {
printf("%s", xdebug_call_class());
printf("::%s", xdebug_call_function());
printf(" in %s", xdebug_call_file());
printf(":%s\n", xdebug_call_line());
}
}
$a = new MyClass();
$b = new MyOther();
$a->myCaller($b);
这个例子会输出以下信息。
MyClass::myCaller in /path/to/xdebug.php:4
你还可以调用xdebug_get_function_stack()方法,它会返回到这一点为止的关于函数调用信息的一个数组。这个函数与标准的debug_backtrace() PHP函数很相似。
如果需要确定某个脚本两点之间调用过的所有函数和方法,例如当执行过程进入另外一个组件时,就可以使用Xdebug函数跟踪功能。这些跟踪记录了对某个文件的所有调用情况,可用于事后分析。使用以下函数启动和停止函数跟踪功能。
* void xdebug_start_trace(string filename [, int options])。这个函数用来启动跟踪函数调用。options值是一个位掩码值,它允许使用XDEBUG_TRACE_ APPEND常量添加跟踪记录文件,使用XDEBUG_TRACE_COMPUTERIZED常量创建计算出的结果的输出格式,甚至可以使用XDEBUG_TRACE_HTML常量创建一个HTML格式的表格跟踪记录。
* void xdebug_stop_trace()。当希望停止跟踪功能时,可以调用这个函数。如果不调用stop函数,跟踪功能将在执行过程结束时自动停止。
代码清单8-9显示了如何跟踪方法调用。这个例子修改了之前的代码,将最终的调用代码封装到跟踪语句中。
代码清单8-9 使用xdebug_start_trace跟踪代码执行
xdebug_start_trace('trace');
$a->myCaller($b);
xdebug_stop_trace();
TRACE START [16:53:57]
0.0010 57964 -> MyClass->myCaller() /code/xdebug.php:21
0.0011 58104 -> MyOther->myCallee() /code/xdebug.php:4
0.0011 58104 -> xdebug_call_class() /code/xdebug.php:10
0.0011 58128 -> printf() /code/xdebug.php:10
0.0014 58196 -> xdebug_call_function() /code/xdebug.php:11
0.0015 58196 -> printf() /code/xdebug.php:11
0.0016 58196 -> xdebug_call_file() /code/xdebug.php:12
0.0016 58244 -> printf() /code/xdebug.php:12
0.0017 58244 -> xdebug_call_line() /code/xdebug.php:13
0.0017 58244 -> printf() /code/xdebug.php:13
0.0018 58244 -> xdebug_stop_trace() /code/xdebug.php:22
0.0019 58244
TRACE END [16:53:57]
Xdebug还允许获得脚本的当前内存使用情况、高峰内存使用情况,以及脚本开始运行之后所花费的时间。
【责任编辑:董书 TEL:(010)68476606】
点赞 0