PHPStorm+Xdebug2.x调试php代码,命令行cli调试,本地,远程调试

来源:赵克立博客 分类: PHP 标签:PHPXDebug发布时间:2016-05-05 16:06:02最后更新:2022-12-06 09:27:46浏览:1705
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2022-12-06 09:27:46
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

Xdebug原理

  1,IDE(PhpStorm)已经集成了一个遵循DBGP的Xdebug插件,当开启它的时候,会在本地开一个xdebug调试服务,监听端口默认是9000,然后就静静等等待安装了Xdebug的PHP服务商连接到它上面给发发信息进行调试。在PhpStorm中,位于:工具栏 > Run > Start / Stop Listening for PHP Xdebug Connetions。


  2,浏览器发送一个带XDEBUG_SESSION_START的参数或Cookie到服务器,服务器接受后将其转到后端的php处理,如果php开启了xdebug模块,Xdebug就会连接到配置的IP和端口,将debug信息转发到IDE上。


本地调试

  • 安装谷歌浏览器,并且安装一个 Xdebug helper  扩展插件

  • 安装phpstorm编辑器

  • php安装xdebug扩展


配置xdebug2.x

3.x配置项有变更,下面是2.x的配置,详情查看 https://xdebug.org/docs/upgrade_guide


首先配置php.ini 开启xdebug模块并写入下面配置

# 如果开启,则会自动启动调试会话,不管请求中有没有设置idekey这个标识
xdebug.remote_autostart = 0
# 开启远程调试
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"

# 本地调试就用本机ip,如果是远程调试则填写phpstorm所在电脑ip,保证xdebug能连接到phpstorm编辑器
xdebug.remote_host = "127.0.0.1"

# 此项开启后会自动连接至请求来源id,但remote_host需留空
xdebug.remote_connect_back=0

xdebug.remote_port=9000
# 启动调试后会把这个值回传给ide

# 回传给ide的值
xdebug.idekey="PHPSTORM"

;记录优化信息
xdebug.profiler_enable=0
xdebug.auto_trace=0
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.profiler_append=1
xdebug.profiler_enable_trigger=on

;变量多显示下级数组
xdebug.var_display_max_children=128
xdebug.var_display_max_data=1024
xdebug.var_display_max_depth=15

使用phpinfo查看输出看xdebug有没有安装成功

然后打phpstorm编辑器配置xdebug,打开设置如图:


2012081607437519535906.png

找到php里面的debug选项找到xdebug的配置项,写入你在php.ini中的的xdebug的端口


2012081607437575518435.png


配置浏览器

打开谷歌浏览器(确保安装啦xdebug helper插件)设置ide key为 phpstorm。这里跟上面php.ini中的一样就好

QQ截图20160505144402.png


火狐浏览器要安装 Cute Xdebug这个插件

打开它的设置为下面如图:

QQ截图20160528085631.png




然后在你的谷歌浏览器中打开要调试的项目地址,点击扩展栏中的xdebug helper图标


QQ截图20160505150529.png

火狐中要开启如图图标:


QQ截图20160528085218.png



最后打开phpstorm run>Start Listen PHP Debug Connections开始等待PHP服务端的Xdebug连接上来,注意端口不要被其它端口占用,特别注意windows下php-cgi默认是9000端口。


浏览器请求时会在你打开的页面url或cookie中添加XDEBUG_SESSION_START,服务端Xdebug遇到这个标记会启动调试会话连接到编辑器。并发送调试信息到编辑器


浏览器调试

启动调试:点击电话小图标。如果没有的话可以直接 菜单 run->start listening for php debug contections

2004031585918446408110.png

在phpstorm中下断点,然后回到浏览器中操作,第一断运行会弹出个提示框,如下图:


QQ截图20160505153151.png

说明已经配置成功  accept 接受就进入编辑器中的一个断点啦如下:

QQ截图20160505153228.png

至此可以快乐的调试喽

CLI调试

有时候需要调试命令行程序,这个时候没有办法像上面一样安装浏览器插件来调试,但是我们可以用另一个方法,让xdebug自动启动一远端调试会话并尝试连接到一个调试客户端,只需要使用下面配置就可以啦

xdebug.remote_autostart = 1

开启自动启动调试会话后,只要有请求过来Xdebug都会启动一个会话,这点是大家要注意的


cli下也可以设置命令行环境下的idekey,如下

set XDEBUG_CONFIG=remote_enable=1 idekey=PHPSTORM remote_host=127.0.0.1 remote_port=9000 remote_autostart=0


远程调试

浏览器调试

服务器为vmware中安装的ubuntu,开发在window10系统宿主机

其实也很简单,只要把xdebug的远程主机填写成你win10宿主机ip,另外特别注意一点phpstorm中的server选项里要填写项目的源代码映射位置,不然会出现能断下来,但是因为找不到源代码路径,导致不能单步跟进,

xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0

#如果开启,则会自动启动调试会话,不管请求中有没有设置idekey这个标识
xdebug.remote_autostart = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"

#本地调试就用本机ip,如果是远程调试则填写phpstorm所在电脑ip,保证xdebug能连接到phpstorm编辑器
xdebug.remote_host = "192.168.1.11"
xdebug.remote_port=9000
xdebug.idekey="PHPSTORM"

远程调试因为服务器代码路径和本地可能会不一样,会导致phpstorm找不到源代码位置,所以需要在phpstorm调试配置里映射下源代码位置

2004031585917865618704.png

cli调试

在命令行下需要设置服务器环境变量,让phpstorm知道使用哪个服务器配置来找到源代码的位置,如下:

linux下设置

export XDEBUG_CONFIG="remote_enable=1 idekey=PHPSTORM remote_host=192.168.1.111 remote_port=9000 remote_autostart=1"
export PHP_IDE_CONFIG="serverName=myserver.loc"

window下设置

set XDEBUG_CONFIG=remote_enable=1 idekey=PHPSTORM remote_host=192.168.1.111 remote_port=9000 remote_autostart=1
set PHP_IDE_CONFIG="serverName=myserver.loc"


设置PHP_IDE_CONFIG后,phpstorm会根据此设置来找源代码的位置

也可以创建一个 ~/.profile  文件在里面输入以下环境变量,在每次打开命令行时自动设置

export PHP_IDE_CONFIG=serverName=myserver.loc


多客户机远程调试

上面配置后只能一个人进行远程调试,如果需要多个人同时远程调试就需要在服务器上设置dbgp proxy,代理会提供两个端口,让ide和服务端的xdebug都连接到这个代理进行中转,这个时候前面设置的idekey就很有用了,这个key需要在代理那里先注册,然后才能使用,代理软件提供两个如下:

https://code.activestate.com/komodo/remotedebugging/

https://xdebug.org/download#dbgpProxy

注意事项

windows下调试时打上断点,这时候有个curl请求本地的其它项目或本项目时会超时,原因是windows下面php-cgi不支持并发,想解决这个问题得再启动一个php-cgi进程且端口不能跟上一个一样,让curl访问的服务由另一个php-cgi进程处理就可以了,其实还是至标不治本,最好还是在linux下使用


如果开发composer插件时想调试脚本,会发现xdebug不起作用,因为composer为了性能默认是禁用xdebug的,需要加入下面环境变量才可以调试

COMPOSER_ALLOW_XDEBUG=1
COMPOSER_DISABLE_XDEBUG_WARN=1



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python