1、下载安装xdebug
用php -m 或 phpinfo() 查看xdebug是否安装成功
2、配置xdebug
注意根据php版本选择对应的xdbug版本。
另外还要根据编辑器选择适合的xdebug版本,不一定版本越新越好。比如phpstorm是2018版本的用的xdebug2.7.2死活就是断点不成功,按了2.6.1就可以
xdebug下载地址
https://xdebug.org/download.php
pecl发址
http://pecl.php.net/package/xdebug
最好下载稳定版的,测试的时候,2.7是beta版的,在我本地一直无法断点出自定义的变量,按了2.6.1稳定版的才可以。
一般的php扩展是extension开关的,这里要注意xdebug要用zend_extension
;extension=php_xdebug.dll 改为 zend_extension=php_xdebug.dll
另:根据 PHP 版本,zend_extension 指令可以是以下之一:
zend_extension (non ZTS, non debug build)
zend_extension_ts ( ZTS, non debug build)
zend_extension_debug (non ZTS, debug build)
zend_extension_debug_ts ( ZTS, debug build)
ZTS:ZEND Thread Safety
可通过phpinfo()查看ZTS是否启用,从而决定用zend_extension还是zend_extension_ts。
extension意为基于php引擎的扩展
zend_extension意为基于zend引擎的扩展
这里配置不要开太多,不然运行时会很慢很慢
[xdebug]
;是否开启自动跟踪
xdebug.auto_trace= off
;是否开启异常跟踪
xdebug.show_exception_trace= off
;是否开启远程调试自动启动
xdebug.remote_autostart= off
;是否开启远程调试
xdebug.remote_enable= On
;允许调试的客户端IP
xdebug.remote_host="localhost"
;远程调试的端口(默认9000)
xdebug.remote_port=9001
;调试插件dbgp
xdebug.remote_handler="dbgp"
xdebug.remote_mode = "req"
;是否收集变量
xdebug.collect_vars= On
;是否收集返回值
xdebug.collect_return= On
;是否收集参数
xdebug.collect_params= On
;是否开启调试内容
xdebug.profiler_enable=off
;跟踪输出路径
xdebug.trace_output_dir="D:\www\xdebug"
;调试输出路径
xdebug.profiler_output_dir="D:\www\xdebug"
xdebug.idekey="PHPSTORM"
3、xdebug原理
https://blog.csdn.net/yinhangbbbbb/article/details/79247331
Xdebug的工作原理可以总结为下面几个步骤
1)IDE(比如PhpStorm,下文所述的客户端)中已经集成了一个遵循BGDp协议(一个专门用来调试的协议)的Xdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。
2)浏览器向Httpd服务器发送一个带有XDEBUG_SESSION_START参数的请求,Httpd收到这个请求之后交给后端的PHP进行处理(下面就忽略Httpd,直接把Php叫做Server)。
3)Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉Xdebug,“嘿,我要debug喔,你准备一下”。这时,Xdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。
4)Php知道Xdebug已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug过滤一下。
5)Xdebug开始过滤代码,Xdebug在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。
6)相应,客户端(IDE)收到Xdebug发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug发送下一步应该什么。
4、phpstorm中的配置
1)debug设置
PHPStorm中XDebug配置在【File】->【Settings】->【Languages & Frameworks】->【PHP】的Debug
debug port 9001 (默认是9000,改9001只是为了不和php-fpm的9000冲突)需要php.ini配置的xdebug.remote_port一致
2)server设置
3)、validate检查
4)设置run debug config
调试web项目选择php web page
5)DBGp Proxy 的IDE key设置
IDE key 应与php.ini 配置保挂一致xdebug.idekey="PHPSTORM",port商品应该与php.ini 远程调试端口一致xdebug.remote_port=9001
6)下载浏览器插件 xdebug-ext 并设置 IDE key 此处应与php.ini 配置保挂一致xdebug.idekey="PHPSTORM"
7)调试
二、在本机调试虚拟机中的项目:
1、在虚拟机中安装php的xdebug扩展
2、php.ini添加相应的扩展配置
[xdebug]
zend_extension=xdebug.so
xdebug.idekey= "PHPSTROM"
;是否开启远程调试自动启动
xdebug.remote_autostart= on
;是否开启远程调试
xdebug.remote_enable= 1
;允许调试的客户端IP
xdebug.remote_host="192.168.100.75" ;即调试的phpstorm主机所在地址
;远程调试的端口(默认9000)
xdebug.remote_port=9001 ;远程调试开启的端口
;调试插件dbgp
xdebug.remote_handler="dbgp"
xdebug.remote_mode = "req"
;是否收集变量
xdebug.collect_vars= On
;是否收集返回值
xdebug.collect_return= On
;是否收集参数
xdebug.collect_params= On
3、修改对应要调试的远程客户端配置
4、配置本地项目和远程项目路径映射
有些配置文件或者路径因所在主机中的路径不同,需要做下调整
5、其他调试和上述类似
三、 对PHP文件直接调试
这里相当于php cli模式的调试
如:php index.php a=3 b=2
debug配置类型选php script ,这里可以不用配置上面web page的接收端口