天天看点

phpstorm与xdebug web调试1、下载安装xdebug

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一致

phpstorm与xdebug web调试1、下载安装xdebug

2)server设置
phpstorm与xdebug web调试1、下载安装xdebug

 3)、validate检查
phpstorm与xdebug web调试1、下载安装xdebug

 4)设置run debug config

调试web项目选择php web page

phpstorm与xdebug web调试1、下载安装xdebug

5)DBGp Proxy 的IDE key设置

IDE key 应与php.ini 配置保挂一致xdebug.idekey="PHPSTORM",port商品应该与php.ini 远程调试端口一致xdebug.remote_port=9001

phpstorm与xdebug web调试1、下载安装xdebug

6)下载浏览器插件 xdebug-ext 并设置 IDE key 此处应与php.ini 配置保挂一致xdebug.idekey="PHPSTORM"

phpstorm与xdebug web调试1、下载安装xdebug

 7)调试

phpstorm与xdebug web调试1、下载安装xdebug

二、在本机调试虚拟机中的项目:

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、配置本地项目和远程项目路径映射

有些配置文件或者路径因所在主机中的路径不同,需要做下调整

phpstorm与xdebug web调试1、下载安装xdebug

5、其他调试和上述类似

三、 对PHP文件直接调试

这里相当于php cli模式的调试

如:php index.php a=3 b=2

debug配置类型选php script ,这里可以不用配置上面web page的接收端口

phpstorm与xdebug web调试1、下载安装xdebug