在做下面的操作之前请先确保您已经配置过debug server端的Xdebug
,如果没有请先配置xdebug
PHPStorm提供多种调试方式,如下面列出的方式(菜单中的Run -> Edit Configurations可以找到所有方式),这里主要关注基于xdebug的PHP Remote Debug。
- PHP Web Application
- PHP HTTP Request
- PHP Remote Debug
PHP Remote Debug Server是指启用了xdebug并用于运行需要调试程序的服务器端,他与PHPStorm通过[DBGp][DBGp]协议交互,交互流程如下:
- 配置并启动PHP Debug Connections
,启动后,PHPStorm开始监听端口
- 用户手动或server端自动触发server端进入调试状态
- Debug server通过[DBGp][DBGp]协议连接PHPStorm,默认情况下,Debug server会根据xdebug.remote_server和xdebug.remote_port连接PHPStorm。
在PHPStorm的 Settings - PHP - Debug 菜单下确认xdebug配置
Debug port默认是9000,与debug server端的xdebug.remote_port对应。
-
菜单中选择 Run -> Edit Configurations… ,在对话框中使用“+”添加“PHP Remote Debug”
-
设置“Name”
-
设置“Configuration”
- Host指debug server,如果是本地可以直接设置localhost,事例中设置域名,并在hosts文件中添加域名指向,便于使用不同server调试;
- 当server端的代码路径和本地代码路径不同时,就需要用“Use Path Mappings”来设置本地和server端文件路径的对应关系,注意是绝对路径,不能是相对路径或软连接;
- ide key(session id),此值设置与下面介绍的XDEBUG_SESSION设置相同即可;
-
确认后,启动 Run -> Start Listen PHP Debug Connetctions,此时PHPStorm开始监听Debug port。
Debug Server在配置xdebug后并不会进入调试状态,用户可以通过向debug server的请求中添加 XDEBUG_SESSION 来触发,XDEBUG_SESSION可用来标识当前请求需要与PHPStorm中的哪个项目相关(上一节中的ide key对应),触发方式如下:
- 通过url参数方式
将 XDEBUG_SESSION_START 作为请求参数,值可自定义,如http://x.com/?XDEBUG_SESSION_START=PHPSTORM; - 通过cookie(建议使用此方式)
将 XDEBUG_SESSION 作为cookie传递(进程cookie)
PHPStorm官方提供了生成用一小段js作为书签的方式种cookie,PHPStorm生成书签,还提供了一些浏览器提供了插件:
如果您已经配置好Remote Debug Server和PHPStorm,就可以在代码中加入断点了(直接点击代码左侧的IDE边框即可)。在代码中在使用 XDEBUG_SESSION 触发debug server进入调试状态时,PHPStorm应该会自动调到您窗口的最前端,那开始Debugging吧。
[DBGp]: http://xdebug.org/docs-dbgp.php DBGp