第167篇:PHPStorm+phpStudy+Xdebug断点调试环境配置踩坑全记录"

admin 2026-10-18 20:18:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

第167篇:PHPStorm + phpStudy + Xdebug 断点调试环境配置踩坑全记录

原创

abc123info
abc123info

希潭实验室

2026年7月1日 17:58
山东

在小说阅读器读本章

去阅读

Part1 前言

大家好,我是 ABC\_123。这两天又碰上了 PhpStorm 配合 PhpStudy 接入 Xdebug 进行 PHP 断点调试的问题。每次遇到它,都得翻一堆资料、踩不少坑才能调通,这次也不例外。索性把整个折腾的过程记录下来,分享给大家,希望大家少走弯路。

Part2 技术研究过程

  • 基础知识

Xdebug 调试分为直连模式和代理模式两种。代理模式通常用于多人共用一台开发服务器进行调试(通过 idekey 区分不同开发者),或远程服务器调试、IDE 位于内网无法被 Xdebug 直接连接等场景;而本地单机配合 localhost 调试时,绝大多数情况下使用直连模式即可,无需额外部署 DBGP 代理。

工作流程:

1   首先启动 dbgpProxy.exe 并监听 9001 端口。

2   PHPStorm 注册到代理,连接 9001 端口,并向代理发送 REGISTER 请求,注册自己的 idekey = PHPSTORM,表示:\"以后凡是 idekey=PHPSTORM 的调试连接,请转发给我\"。

3   Xdebug 发起调试连接,根据 xdebug.client\_host 和 xdebug.client\_port(或 Xdebug 2 的 xdebug.remote\_host、xdebug.remote\_port)连接到 9001 端口,并在 DBGP 初始化报文中携带相同的 idekey = PHPSTORM。

4   dbgpProxy 查找注册表,根据 idekey 找到对应的 IDE 连接,然后将该 调试会话 转发给 PHPStorm,之后 Xdebug 与 PHPStorm 的所有调试数据都通过代理进行转发。

需要注意的是,PHPStorm 中的“DBGP 代理端口(9001)”配置仅在已启动 dbgpProxy.exe 且代理监听该端口时才会生效;如果没有启动代理,这项配置不会发挥任何作用,也不会影响 Xdebug 的连接目标。

  • PhpStudy环境 + Xdebug 安装配置

选择新版phpstudy的小皮版本,也就是phpstudy V8.1版本,php版本选择 php7.3.4nts。

接着设置phpstudy的php扩展插件,勾选xdebug插件。

  • 核心配置:php.ini 与 PhpStorm 双端设置,

切换到如下界面,修改php.ini配置文件,对xdebug进行配置,Xdebug是发起调试的客户端,PHPStorm是接收调试的服务端。这里面有一个坑,由于 Xdebug 早期版本默认使用 9000 作为调试端口,而部分 PHP 环境(如 PHP-CGI、PHP-FPM)默认也会占用 9000 端口,因此可能发生端口冲突。当 PHPStorm 监听 9000 端口时,Xdebug 发起的调试连接可能无法正常建立。为避免冲突,建议将 Xdebug 的调试端口修改为 9003,并将 PHPStorm 的监听端口同步配置为 9003。Xdebug 3 也已将默认调试端口调整为 9003,因此推荐优先使用该端口。

将xdebug.remote\_enable = On 开启。配置dbgp代理及 idekey 为 PHPSTORM。

具体配置如下:

[Xdebug]zend_extension=D:/1WebSite/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dllxdebug.collect_params=1xdebug.collect_return=1xdebug.auto_trace=Offxdebug.trace_output_dir=D:/1WebSite/phpstudy_pro/Extensions/php_log/php7.3.4nts.xdebug.tracexdebug.profiler_enable=Offxdebug.profiler_output_dir=D:/1WebSite/phpstudy_pro/Extensions/php_log/php7.3.4nts.xdebug.profilerxdebug.remote_enable=Onxdebug.remote_host=localhostxdebug.remote_port=9003xdebug.remote_handler=dbgpxdebug.remote_mode = reqxdebug.idekey = PHPSTORM

  • 配置PHP CLI解析器

打开phpstorm,添加phpstudy目录下的php.exe。

如图所示,添加php.exe之后,手工选择配置文件的路径及调试器扩展的路径。

调试功能菜单下的Xdebug功能的调试端口 9003,9000要包含上述php.ini中配置的9003。

DBGp代理配置,填好前面我们设置的PHPSTORM及主机域名。

配置服务器:主机(H) 配置为 localhost + 端口8001,表示你的 PHP 项目通过 http://localhost:8001 访问。注意:这里的端口 8001 是 Web 服务器端口,不是 Xdebug 的调试端口9003,调试时 PhpStorm 会自动生成形如 http://localhost:8001/?XDEBUG\_SESSION\_START=PHPSTORM 的 URL。

继续配置 PHP 网页。

点击验证,结果发现报错。

  • 踩坑实录:调试器验证失败及源码直接输出

经过几次更正,还是报错。

问题出在哪里呢?在phpstudy的web目录下写了一个test111.php测试文件,网站访问之后,发现直接显示源码。

后续经过好一顿折腾,发现是网站过期的原因。解决办法就是删除该网站,重新新建一个。

新建一个网站,配置如下:

重新回到phpstorm界面,点击验证按钮,发现可以成功了。

执行netstat -ano | findstr :9003,发现9003端口并没有监听。点击确认按钮之后,使用phpstorm运行当前网站,发现这样就可以断点调试了。

  • 调试显示500 Internal Server Error报错

在调试php代码中,又遇到了一个问题,提示500错误。

经过排查,发现是调试暂停的时间大于了超时时间。接下来进行如下设置,打开Apache2.4.39的conf目录的vhosts目录,修改指定的配置文件,设置超时时间。

接下来重新调试,发现一切正常了。

如果想要url去掉 ?XDEBUG\_SESSION\_START=19633 这个额外调试参数,可以设置 xdebug.remote\_autostart = 1,开启后,每一个请求都会自动发起调试连接,无需任何参数或 cookie。代价是性能开销大,通常不推荐。

  • Xdebug Helper 与调试参数去除

首先安装chrome插件Xdebug助手。

回到phpstorm下,添加PHP远程调试,填入PHPSTORM

在chrome浏览器下点击绿色调试按钮,输入url就直接可以断点调试了。

Part3 总结

1.  留下笔记所用,欢迎更正。

2.  欢迎大家扫码加入知识星球,一起学习进步。

知识星球分为以下几个板块:

知识星球的每一个工具都是精心筛选,都附带有实测评价及使用说明。

知识星球的每一篇PDF文档、PPT文档都细心整理,配有3到9张关键截图。

欢迎大家扫码加入知识星球,一起学习进步!

公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com

OR 2332887682#qq.com

(replace # with @)


openHiTLSTLCP/DTLCP编译与抓包完整操作记录" 网络安全文章

openHiTLSTLCP/DTLCP编译与抓包完整操作记录"

本文详细记录了在KaliLinux上编译openHiTLS0.3.3版本并启用TLCP/DTLCP国密协议的完整过程,包括获取源码、编译Secure_C安全库、通过configure.py配置关键编译宏(如HITLS_TLS_PROTO_TLCP11等)以及最终生成可执行文件。操作步骤清晰,验证了产物为64位可执行文件。
评论:0   参与:  0