xdebug、PHPSTORM 配置PHP 断点 DEBUG 相关配置
1. 为什么要折腾 debug 断点
背景:最近正好调试一个PHP 服务的 bug,平时都是用二分法+打日志法来进行 debug。图的就是一个简单粗暴,后面发现有一个同事(老高)都是打断点来调试,我就想着也要试试,顺便白嫖了一波 老高给我的关键词 Xdebug 以及 相关配置。
2. xdebug 配置过程
- 创建一个 xdebug.ini 配置文件
[xdebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=develop,debug
xdebug.client_port = 9003
# 将 xdebug.start_with_request 设置为 yes 表示 Xdebug 扩展将自动启动调试会话,而不需要在 URL 参数中指定。这在大多数情况下都是合适的设置,但请确保您的应用程序环境支持这种自动启动调试会话的方式。
xdebug.start_with_request=yes
xdebug.log='/data/logs/php/xdebug.log'
xdebug.connect_timeout_ms=2000
xdebug.client_host=host.docker.internal
- 创建一个 dockerfile 文件
FROM php:7.2-fpm
WORKDIR /data/
# 安裝 delve
RUN pecl install xdebug-3.1.4
COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
备注:上面第一步和第二步都是为了安装和配置xdebug。
Xdebug:是一个用于调试和分析PHP应用程序的开源调试器和分析工具。主要可以有5 个功能点(逐步调试(debug),跟踪(Tracing),提升错误报告,性能分析,单元测试覆盖率分析)更多功能发掘可以看 xdebug 官网:https://xdebug.org/
- docker-compose 替换原来的 PHP image
- 这里../../cave/php中包含着两个文件(第一步的 xdebug.ini 和 第二步的 dockerfile )
api:
container_name: api
# image: php
build: ../../cave/php/
- 启动容器以后,进入容器里面,看下是否配置成功
php -i | grep xdebug

- PHPSTORM 配置 DEBUG 相关配置
- 配置 debug 端口(下面第一张图)
- 开启 debug 服务监听的端口(下面第二张图)


备注:这里搜网上的教程的时候,发现还有人配置DBGP 代理(DBGP Proxy)用于帮助调试器与正在运行的 PHP 脚本之间建立调试连接。 不过我们这里在xdebug.ini 配置文件中直接配置了 xdebug.client_host=host.docker.internal ,可以直接连接到宿主机的 PHPSTORM 启动的调试器。
打断点后请求 API 接口,触发调试

3. PHPstorm 断点 debug 的基础教程

- Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。
- Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。
- Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。
- Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。
- Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。
- Run to Cursor (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
- Evaluate Expression (Alt + F8):计算表达式。
参考文档:https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html
以上,基本就是全部的利用 PhpStorm 对 PHP 程序进行 debug 的配置和基本操作了。
THE END