PHP Xdebug调试专题 - 手动触发记录 ¶
作者:KK
发表日期:2016.2.24
请求参数触发 ¶
如果配置xdebug.auto_trace=on
的话,你运行任何PHP文件都会产生回溯记录
但有时候你只需要回溯某一个地址的运行轨迹,可以通过设置xdebug.trace_enable_trigger=on
来实现,但前提是要设置xdebug.auto_trace=off
(或者删除这个选项))
配置样本:
xdebug.auto_trace=off
xdebug.trace_enable_trigger=on
xdebug.trace_output_dir="E:\xdebug"
这样你访问/index.php
不会产生回溯记录,但是你如果修改一下URL参数,加上XDEBUG_TRACE
这个参数名,不用参数值,只要有参数名就行了
就是访问这样的/index.php?XDEBUG_TRACE
地址,然后就会产生文件了,这就是通过GET参数触发
而通过POST请求也是这样,如果你的POST参数中带有XDEBUG_TRACE才会有回溯
$.ajax({
url : '/index.php',
type : 'post',
data : {
a : 1,
XDEBUG_TRACE : 11 //这个值随便设置,如果你不设置就不会POST这个字段上去!
}
});
函数触发 ¶
在测试前请先确认配置xdebug.auto_trace=off
(关闭自动回溯)
然后找到你要开始追踪回溯的代码位置调用xdebug_start_trace
函数,再在要停止追踪回溯的位置调用xdebug_stop_trace
函数,这样就会生成回溯信息,并且是对你开始和结束trace函数之间的代码进行记录,其它无关的代码是不记录的
样例代码:
$str = 'abc';
$str1 = substr($str, 0, 2);
xx('a', 'b');
function xx($a, $b){
xdebug_start_trace(); //开始记录回溯
$x = array();
array_push($x, $a);
print(222);
array_push($x, $b);
xdebug_stop_trace(); //结束记录回溯
yy();
return $x;
}
function yy(){
print_r(123);
}
并且要注意,通过函数触发的话并不需要什么配置,你只要开启了扩展就可以,就是只保留zend_extension="xdebug.dll"
就可以,其它xdebug的相关配置可以完全不配置,如果有文件名定制需求就再保留xdebug.trace_output_name
选项就足够了
然而如果你开启了xdebug.auto_trace
其实相当于让PHP启动时就自动执行xdebug_start_trace函数,于是会报错说这个函数已经执行过了,所以为避免麻烦请不要开启xdebug_start_trace
这个调试更加精准,因为如果整个运行周期都回溯下来,起码有成千上万行,查找成为了艰难的事情
而函数触发时就缩小了你需要的范围,查找就快捷了很多!