用netbeans和xdebug调试php的配置

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服务

 

然后可以用个phpinfo()函数测试是否成功了。 

 

下面开始设置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……我就是没重启浪费了好多时间……

 

 

路径映射、调试器代理以及在定制 URL 上启动调试会话

可以调试脚本和 Web 页,还可以在本地或远程调试 Web 页。遗憾的是,对于远程调试,在远程服务器上调试的 PHP 文件与在本地计算机上运行的 NetBeans IDE 中打开的文件并不相同。因此,NetBeans 中的调试器支持必须能够将服务器路径映射到本地路径。然而,由于存在诸多复杂因素,无法针对各种情况自动解决路径映射问题。因此,从 NetBeans 6.7 开始,您可以通过项目设置针对各个运行配置手动定义路径映射。此外,还可以指定代理服务器(如果有),以及在其上启动调试会话的 URL。如果未指定此 URL,则将从索引文件开始执行调试。

设置路径映射并启用定制调试 URL:

  1. 在 "Projects"(项目)窗口中右键单击项目节点,然后从上下文菜单中打开项目的 "Properties"(属性)。
  2. 在 "Project Properties"(项目属性)对话框中,转至 "Run Configuration"(运行配置)类别。
  3. 单击 "Advanced"(高级)按钮。"Advanced Web Configuration"(高级 Web 配置)对话框打开。
  4. 添加要进行路径映射的服务器路径和项目路径。
  5. 在 "Debug URL"(调试 URL)下,选中以下一个选项(不要将默认值保留为选中状态): 

    • "Ask Every Time"(每次都询问):让 IDE 提示您在启动调试会话时输入 URL。
    • "Do Not Open Web Browser"(不打开 Web 浏览器):需要您手动打开浏览器并输入 URL(您需要 GET/POST XDEBUG_SESSION_START 变量)。
  6. 使用代理服务器进行调试时,请在 "Debugger Proxy"(调试器代理)类别中输入该服务器的主机名和端口。

有关详细信息,请参见 "NetBeans for PHP"(NetBeans PHP) 博客中的 Path Mapping in PHP Debugger(使用 PHP 调试器进行路径映射)的帖子。


------------------------------------------------------------

配置

PHP.INI

在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,如果出现了,那就成功了一大半

netbeans

设置的地方在tool->option里找到debug标签,在这里可以修改PHP.EXE的路径,还有调试的工具和端口号等。

注意

  • 如果你用的远程调试,务必打开xdebug.remote_enable
  • 如果你用的域名调试,那么请修改xdebug.remote_host为你的域名,不要忘了加引号,不用带http://
  • 如果总是显示等待xdebug,那么就换一个web浏览器试试,在tool->option->general里可以找到

===========================================================

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  
  • 0 = 人可读. 从左至右每列分别表示:时间点, 内存, 内存差 (需要设置xdebug.show_mem_delta=1), 等级, 函数名,函数参数 (需要设置,xdebug.collect_params=1,只要是非零), 当前代码行所在文件名 , 行号.
  • 1 = 机器可读[1]. 需要借助第三方app,例如:xdebug trace file parser 或者 xdebug trace viewer
  • 2 = html格式 即table,用browser打开,显示table
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-general] Re: Is trace_enable_trigger defunct? 

        这里查看具体显示区别
限制 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 :
  • XDEBUG_TRACE_APPEND: 1 = 追加文件内容末尾, 0 = 覆写该文件
  • XDEBUG_TRACE_COMPUTERIZED:
    • 2 =同 xdebug.trace_format=1 .
  • XDEBUG_TRACE_HTML: 4 = 输出HTML表格,浏览器打开为一table
 
       
  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

 

怎么看代码追踪trace文件:

 

  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 例如:
  • var = value
  • array(index => value...)
  • just value (builtin funcs)
         
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 不显示返回值
       

 


转载于:https://my.oschina.net/haozi3156666/blog/364154

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值