netbeans-xdebug 断点调试php

时间:2022-05-11 16:58:09

来自NetBeans官网的帮助文档:

https://netbeans.org/kb/docs/php/debugging_zh_CN.html

但具体问题,我们还是要说下

准备工作

本地部署的server环境

下载与php版本对应的xdebughttp://www.xdebug.org

配置php

下载xdebug后,在php.ini 中配置xdebug

zend_extension=php_xdebug-2.4.-7.0-vc14-nts.dll

xdebug.remote_port=
xdebug.remote_enable=
xdebug.remote_host=127.0.0.1
xdebug.remote_autostart=
xdebug.idekey="netbeans-xdebug"

这一步非常重要,因为坑就在这,当配置中扩展为如下的配置时,phpinfo 显示是正确的

extension=php_xdebug-2.4.-7.0-vc14-nts.dll

netbeans-xdebug 断点调试php

但当我们NetBeans调试php时,一直提示“等待NetBeans连接xdebug

所以,我们要使用命令行查看已经加载的模块,查看xdebug是否正确加载

 php -m

当提示:PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0

netbeans-xdebug 断点调试php

意思就是xdebug必须加载到zend modules的扩展中

extension意为基于php引擎的扩展

zend_extension意为基于zend引擎的扩展

所以 正确的方法是

zend_extension=php_xdebug-2.4.-7.0-vc14-nts.dll

在php.ini 中还要设置

output_buffering = Off

配置NetBeans

在NetBeans的 工具-选择-php 中配置  (本人NetBeans版本8.0.2)

netbeans-xdebug 断点调试php

在这里面也有个

就是调试器端口, 网上一般都是9000,但是有没有考虑用Nginx的感受,在用nginx作为服务器代理的时候,nginx一般使用的就是9000

server {
listen ;
server_name web.com;
root "F:/web";
location / {
index index.html index.htm index.php;
autoindex on;
if (!-e $request_filename){
rewrite ^/(.*) /index.php?r=$ last;
}
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}

这就是为什么我们在配置php的xdebug时候使用9001端口, (php.ini 中的端口要与NetBeans中的调试器端口一致)

会话ID 与 xdebug.idekey 保持一致

不然同样提示:等待NetBeans连接xdebug

NetBeans断点调试php

这一步应该不用多说,只要用过NetBeans就知道如何调试,要说明一点,按F7 是断点的一步步调试

netbeans-xdebug 断点调试php

netbeans-xdebug 断点调试php

netbeans-xdebug 断点调试php

netbeans-xdebug 断点调试php

参考:

http://blog.csdn.net/21aspnet/article/details/47756651

http://www.cnblogs.com/zhepama/p/3541683.html