1.先随便建立一次调试.然后打个断点.按下F5.完成一次调试.这个时候红色按钮不该是灰色的.这就保证了浏览器和netbeans建立了连接(第一次必须设置一个断点,按f5完成调试,后通过浏览器url调试相应的程序,后面需要加上&XDEBUG_SESSION_START = "netbeans-xdebug")
2.再切换到chrome.随意打开一个页面.就都可以进行debug了..避免了多次调试更改url和参数.
netbeans官网使用教程点击打开链接
----------------------------------------------
之前用过一段时间在apache,netbeans下通过xdebug调试。感觉不错,最近事情不多想从新配置下,是基于最新版本的php5.4做的,后来参考了下xdebug的官网说明完成的。官网地址:http://wiki.netbeans.org/HowToConfigureXDebug#How_to_configure_xdebug_with_WAMP
具体步骤如下: 1、去http://www.xdebug.org/download.php下载相应的php_xdebug.dll,这个要根据你自己的php版本哦。
然后把下载的文件放到php的ext目录下,其实放在任何你想要的目录都可以,主要是在下面说的php.ini里指定好路径。
2、修改php.ini
zend_extension=D:/php/ext/php_xdebug-2.2.1-5.4-vc9.dll
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
其中 zend_extension=D:/php/ext/php_xdebug-2.2.1-5.4-vc9.dll 是php5.3以及以上版面的写法,
如果是php5.2以及以下版本的是 zend_extension_ts=D:/php/ext/php_xdebug-2.2.1-5.4-vc9.dll。
下面是几个不必须的参数。
xdebug.auto_trace=on
xdebug.collect_params=on
xdebug.collect_return=on
xdebug.trace_output_dir="D:/php/debuginfo"
xdebug.profiler_enable=on
xdebug.profiler_output_dir="D:/php/debuginfo"
trace_output_dir 对于的是类似trace.4046332594.xt的文件,
profiler_output_dir对应得是类似cachegrind.out.10360 这样的文件
最好重启下Apache服务
下面开始设置netbeans,
工具->选项->常规 选择好web浏览器 工具->选项->php->调试 查看高度的端口是否正确 下一步就可以打开你要调试的文件开始了,设置好断点(其实在调试过程中你还可以设置或修改断点)。 调试过程中的情况大概如下图,你可以看执行过程中各个变量的情况。
要注意的是,xdebug.trace_output_dir="d:\xdebug" 这个文件夹要手动创建。
----
zend_extension=D:\wamp\bin\php\php5.3.3\ext\php_xdebug-2.1.0-5.3-vc6.dll
[Xdebug]
;是否开启自动跟踪
xdebug.auto_trace= On
;是否开启异常跟踪
xdebug.show_exception_trace= On
;是否开启远程调试自动启动
xdebug.remote_autostart= On
;是否开启远程调试
xdebug.remote_enable= On
;允许调试的客户端IP
xdebug.remote_host=192.168.1.211
;远程调试的端口(默认9000)
xdebug.remote_port=9000
;调试插件dbgp
xdebug.remote_handler=dbgp
;是否收集变量
xdebug.collect_vars= On
;是否收集返回值
xdebug.collect_return= On
;是否收集参数
xdebug.collect_params= On
;跟踪输出路径
xdebug.trace_output_dir="d:\xdebug"
;是否开启调试内容
xdebug.profiler_enable=On
;调试输出路径
xdebug.profiler_output_dir="d:\xdebug"
----
然后就可以测试了。
Netbeans上要注意几点:
1. 默认的浏览器最好选择一个
2. PHP的选项里,编译路径是空的,最好选上。
3. 要选择监视变量的数量,否则这个功能默认是关闭的。
4. 配置都保存了之后,还是连接失败的话,就重启一下netbeans吧。很多人都知道,该了PHP.INI要重启服务器。但是没想过netbeans的有些配置改了之后,也要重启才能生效……ORZ……我就是没重启浪费了好多时间……
可以调试脚本和 Web 页,还可以在本地或远程调试 Web 页。遗憾的是,对于远程调试,在远程服务器上调试的 PHP 文件与在本地计算机上运行的 NetBeans IDE 中打开的文件并不相同。因此,NetBeans 中的调试器支持必须能够将服务器路径映射到本地路径。然而,由于存在诸多复杂因素,无法针对各种情况自动解决路径映射问题。因此,从 NetBeans 6.7 开始,您可以通过项目设置针对各个运行配置手动定义路径映射。此外,还可以指定代理服务器(如果有),以及在其上启动调试会话的 URL。如果未指定此 URL,则将从索引文件开始执行调试。
设置路径映射并启用定制调试 URL:
有关详细信息,请参见 "NetBeans for PHP"(NetBeans PHP) 博客中的 Path Mapping in PHP Debugger(使用 PHP 调试器进行路径映射)的帖子。
------------------------------------------------------------
在phpinfo()页面中找到INI文件,在文件最后加入以下代码
;注意:我们的版本号可能不同 zend_extension="ext\php_xdebug-2.2.5-5.4-vc9.dll" [Xdebug] ;是否开启自动跟踪 xdebug.auto_trace= On ;是否开启异常跟踪 xdebug.show_exception_trace= On ;是否开启远程调试自动启动 xdebug.remote_autostart= On ;是否开启远程调试 xdebug.remote_enable= On ;允许调试的客户端IP ;xdebug.remote_host= 192.168.1.1 ;远程调试的端口(默认9000) xdebug.remote_port=9000 ;调试插件dbgp xdebug.remote_handler=dbgp ;是否收集变量 xdebug.collect_vars= On ;是否收集返回值 xdebug.collect_return= On ;是否收集参数 xdebug.collect_params= On ;跟踪输出路径 xdebug.trace_output_dir="d:\xdebug" ;是否开启调试内容 xdebug.profiler_enable=On ;调试输出路径 xdebug.profiler_output_dir="d:\xdebug" ;调试的域名 xdebug.remote_host=localhost
修改以后重启服务器,看看有没有出现xdebug,如果出现了,那就成功了一大半
设置的地方在tool->option里找到debug标签,在这里可以修改PHP.EXE的路径,还有调试的工具和端口号等。
xdebug.remote_enable
xdebug.remote_host
为你的域名,不要忘了加引号,不用带http://===========================================================
2014.08.06
PHP调试时,不得不提XDEBUG这个调试利器。学习PHP以来,几乎所有的问题我都利用它来解决。
首先关于如何安装,不在赘述,请自行google之。(需要特别注意的是:PHP5.2 和5.3 ,关于加载xdebug.dll的差别;也可以在这里查看细节,官网也有说明)
Category | Setting | Values | Description | |
---|---|---|---|---|
日志 |
xdebug.trace_output_dir |
日志追踪输出目录 | ||
xdebug.trace_output_name | 日志文件名,xdebug提供了一系列的标识符,生成相应格式的文件名,具体请参考官网 | |||
xdebug.trace_options | 记录添加到文件中方式:1 = 追加(如果存在该文件). 0 (default) = 覆盖(如果存在该文件) | |||
显示数据 | xdebug.collect_params | 非零值 = 控制function的参数显示选项
|
||
xdebug.collect_return | 1 = 显示function返回值. Default 0 不显示 | |||
xdebug.collect_vars | 1 = 显示当前作用域使用了哪些变量,显示变量名,该选项不会记录变量的值,如果需要,使用xdebug.collect_params | |||
xdebug.collect_assignments | 1 = 添加一行显示变量赋值(若为1,形如$a = 1;这类Assignment Expression会在trace文件里显示) | |||
格式 | xdebug.trace_format |
|
||
xdebug.show_mem_delta | 1 = 显示每次函数调用内存消耗(内存差) | |||
行为 | xdebug.auto_trace | 1 = 打开自动追踪. (追踪方式有2种,一种是自动追踪,所有php脚本运行时,都会产生trace文件;另一种是触发方式追踪,如下) | ||
xdebug.trace_enable_trigger[2] | 1 = 使用 XDEBUG_TRACE GET/POST 触发追踪, 或者通过设置cookie XDEBUG_TRACE. 为了避免每次请求时,都会生成相应trace追踪文件,你需要把auto_trace设置为0 注:该特性只在2.2+版本才能设置 |
|||
这里查看具体显示区别 | ||||
限制 | xdebug.var_display_max_depth | 数组和对象元素显示深度:主要用在数组嵌套,对象属性嵌套时,显示几级的元素内容. Default 3. | ||
xdebug.var_display_max_data | 变量值为字符串时显示多长. Default 512. | |||
xdebug.var_display_max_children | 数组和对象元素显示的个数. Default 128 |
Category | Function | Description | |
---|---|---|---|
void xdebug_enable() | 手动打开,相当于xdebug.default_enable=on | ||
void var_dump() | 覆写php提供的var_dump,出错时,显示函数堆栈信息,(前提:php.ini里html_errors为1),使用xdebug.overload_var_dump 设置是否覆写 | ||
void xdebug_start_trace( string trace_file_path [, integer options] ) |
手动控制需要追踪的代码段 trace_file_path :文件路径(相对或绝对,若为空).如果为空,或者不传参, 使用xdebug.trace_output_dir设置的目录 options :
|
||
void xdebug_stop_trace() | 停止追踪,代码追踪在该行停止 | ||
string xdebug_get_tracefile_name() | 获得输出文件名,与 xdebug.auto_trace配合使用. | ||
void xdebug_var_dump([mixed var[,...]]) | 输出变量详细信息,相当于php里的var_dump,具体显示请看这里 | ||
xdebug.show_local_vars | 默认为0,不显示;非零时,在php执行出错时,显示出错代码所在作用域所有本地变量(注:这会产生大量信息,因此默认是closed),具体显示差别如下图[3] | ||
array xdebug_get_declared_vars() | 显示当前作用域中已声明的变量 | ||
array xdebug_get_code_coverage() | 显示某一段代码内,代码执行到哪些行[4] | ||
注:列举一部分函数,其它请参考官网 |
[1]:
针对xdebug.trace_format=1,每列所代表含义:
附上具体生成trace文件:
1 Version: 2.2.0rc1 2 File format: 2 3 TRACE START [2012-03-24 10:24:20] 4 1 0 0 0.089847 419576 {main} 1 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 0 0 5 2 1 0 0.092995 419608 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 20 1 '' 6 2 1 1 0.093988 419608 7 2 2 0 0.095729 419640 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 21 1 TRUE 8 2 2 1 0.096164 419640 9 2 3 0 0.097045 419688 xdebug_get_declared_vars 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 26 0 10 2 3 1 0.098388 422488 11 2 4 0 0.098681 422520 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 26 1 array (0 => 't1', 1 => 'items', 2 => 'a', 3 => 'arr', 4 => 'last_item', 5 => 'nn', 6 => 'current_item', 7 => 'ccccccccb', 8 => 'b', 9 => 'i', 10 => 'result', 11 => 'k', 12 => 'value', 13 => 'config', 14 => 'row', 15 => 't', 16 => 'key', 17 => 'v', 18 => 'input', 19 => 'fields', 20 => 'ar', 21 => 's', 22 => 'mysqli', 23 => 'tag', 24 => 'dir', 25 => 'configs', 26 => 'type') 12 2 4 1 0.100691 422520 13 2 5 0 0.101007 419720 intval 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 28 1 NULL 14 2 5 1 0.101366 419720 15 2 6 0 0.101759 419720 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 28 1 0 16 2 6 1 0.102262 419720 17 2 7 0 0.102443 419888 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 29 1 array (0 => 9) 18 2 7 1 0.102703 419888 19 2 8 0 0.102855 419760 var_dump 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 30 1 'D:\\www\\CodeIgniter\\index.php' 20 2 8 1 0.103096 419760 21 2 9 0 0.103229 419688 xdebug_stop_trace 0 D:\www\myweb\all\app\storage\third_party\oss\demo\test.php 31 0 22 0.103393 419808 23 TRACE END [2012-03-24 10:24:21]
Record type | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
Entry入口 | level | 函数编号 |
总是'0' |
时间点 | 内存消耗 | 函数名 | 自定义 (1) or php内置函数 (0) | include/require的文件名 | 文件名 | 执行行号 |
Exit出口 | level | 函数编号 | 总是'1' | 时间点 | 内存消耗 | 无 |
[2]:
如果你使用触发方式启用代码追踪:(xdebug.auto_trace = 0;xdebug.trace_enable_trigger = 1)
那么,你可以在URL里添加XDEBUG_TRACE,例如:localhost/test.php?XDEBUG_TRACE,或者localhost//test.php?XDEBUG_TRACE=1(任意值)。
是不是觉得很麻烦,那么装个插件,让它来帮你。Chrome XDEBUG Helper,使用它,你可以切换3种状态,disabled ,debugging enabled,profiling enabled(下篇详细介绍),然后切换到debugging enabled。运行该脚本,(去掉URL里的?XDEBUG_TRACE),就可以代码跟踪了。
不过,我发现好像这个状态不管用,启用该状态,也不会自动跟踪代码生成trace文件。
再次提醒:该特性只在xdebug2.2版本才实现了。
使用xdebug_start_trace()和xdebug_stop_trace()可以手动追踪你的代码执行情况。
1 xdebug_start_trace(); 2 //your code required to trace 3 xdebug_stop_trace();
[3]:
xdebug.show_local_vars=1:
xdebug.show_local_vars=0:
[4]:
1 <?php 2 xdebug_start_code_coverage(); 3 4 function a($a) { 5 echo $a * 2.5; 6 } 7 8 function b($count) { 9 for ($i = 0; $i < $count; $i++) { 10 a($i + 0.17); 11 } 12 } 13 14 b(6); 15 b(10); 16 17 var_dump(xdebug_get_code_coverage()); 18 ?>
1 array (size=1) 2 'D:\www\test.php' => 3 array (size=11) 4 4 => int 1 5 5 => int 1 6 6 => int 1 7 8 => int 1 8 9 => int 1 9 10 => int 1 10 11 => int 1 11 12 => int 1 12 14 => int 1 13 15 => int 1 14 17 => int 1
注意var_dump(xdebug_get_code_coverage());所在位置区别。
1 <?php 2 xdebug_start_code_coverage(); 3 4 function a($a) { 5 echo $a * 2.5; 6 } 7 8 var_dump(xdebug_get_code_coverage()); 9 10 function b($count) { 11 for ($i = 0; $i < $count; $i++) { 12 a($i + 0.17); 13 } 14 } 15 16 b(6); 17 b(10); 18 ?>
1 array (size=1) 2 'D:\www\test.php' => 3 array (size=2) 4 4 => int 1 5 8 => int 1
Data | format=0 | format=1 | Comment | |
---|---|---|---|---|
Call | ||||
Call level | Indent level | Col 1 | ||
Call number | 不显示 | Col 2 | ||
Call vs return | - | Col 3 | Call =0, Return = 1 | |
Delta time | Col 1 | Col 4 | ||
Memory | Col 2 | Col 5 | ||
Delta memory | Col 3 | - | ||
"->" | Col 4 | - | 直接调用call | |
Statement | Col 5 (incl spaces) | - | 按PHP语义格式化函数语句 | |
Function name | - | Col 6 | 函数名 | |
Builtin vs User func | (Not avail) | Col 7 | 0 = 内置函数; 1 = 自定义函数 | |
Source file path:line | Col 6 | - | ||
Source file path | Col 8 | |||
Line num | Col 9 | |||
List of args | (included in Statement) | Col 10...n | 例如:
|
|
Return | ||||
Call level | Indent level | Col 1 | ||
Call number | (not explicit) | Col 2 | ||
Call vs return | - | Col 3 | Call =0, Return = 1 | |
Delta time | - | Col 4 | ||
Memory | - | Col 5 | ||
Delta memory | - | - | ||
">=>" | Col 1 | - | 返回值 | |
Return value | Col 2 | (Not avail) | format =1 不显示返回值 | |