原理了解
安装
#dockerfile
RUN set -ex; \
wget http://xdebug.org/files/xdebug-2.8.0.tgz; \
tar -xzvf xdebug-2.8.0.tgz; \
cd ./xdebug-2.8.0; \
phpize; \
./configure --enable-xdebug; \
make && make install
COPY xdebug.ini /usr/local/etc/php/conf.d/make-php-ext-xdebug.ini
#或者
RUN pecl install xdebug && docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/make-php-ext-xdebug.ini
#xdebug.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
; xdebug.remote_enable=1 ;开启访问ide
; xdebug.remote_autostart=off ;是否开启自动调试
; xdebug.remote_connect_back=1 ;任意 ide ip
; xdebug.remote_host=192.168.0.16 ;指定 ide ip (容器网关好像不行?)
; xdebug.remote_port=9003 ;ide 端口号
; xdebug.remote_log = "/var/log/fpm/xdebug.log" ;xdebug 日志位置
; xdebug.idekey=PHPSTORM ;ide key 对配置没啥影响 应该是做个标识
ide 配置
-
这个不用配置的 有些文章会配置这个 多余
-
配置服务器 注意: docker 下要映射 本机不用配置映射
-
配置 ide 的端口和 ip
-
可以配置 ide key
-
编辑调试配置
-
好了, 配置就这些了 没有多的了
在开始调试教程之前说一下:
- 改 ini 配置后,记得重启你的 php (如果你是 apache 模块的方式,就重启 apache)
- 还有如果在下面的每一个方式中,没出现调试效果,请自行去查看 xdebug 的日志(日志会很仔细的告诉你的错误是什么),具体日志文件在哪,不用我说了,前面都有参数指定位置了 请认真看文章
好,我们开始
第一种方式 (手动触发调试)
- xdebug 配置
xdebug.remote_enable=1 ;开启访问ide
xdebug.remote_host=192.168.0.16 ;指定 ide ip (容器网关好像不行?)
xdebug.remote_port=9003 ;ide 端口号
xdebug.remote_log = "/var/log/fpm/xdebug.log" ;xdebug 日志位置
xdebug.idekey=PHPSTORM ;ide key 对配置没啥影响 应该是做个标识
- 打个断点
- 点击这个
- 浏览器弹出 数字 对于 ide 的 弹出的调试终端
- 手动触发调试就完成了
第二种方式 (配合浏览器插件触发调试)
- xdebug 配置
xdebug.remote_enable=1 ;开启访问ide
xdebug.remote_host=192.168.0.16 ;指定 ide ip (容器网关好像不行?)
xdebug.remote_port=9003 ;ide 端口号
xdebug.remote_log = "/var/log/fpm/xdebug.log" ;xdebug 日志位置
xdebug.idekey=PHPSTORM ;ide key 对配置没啥影响 应该是做个标识
- 打个断点
- 点击这个
- chrome 浏览器安装 xdebug 插件
- 开启xdebug插件 再访问 url
- ide 弹出调试终端
- 插件方式完成了
第三种方式(自动触发调试)
- xdebug 配置 注意这个配置和上面的不一样
xdebug.remote_autostart=on ;开启自动调试
xdebug.remote_enable=1 ;开启访问ide
xdebug.remote_host=192.168.0.16 ;指定 ide ip (容器网关好像不行?)
xdebug.remote_port=9003 ;ide 端口号
xdebug.remote_log = "/var/log/fpm/xdebug.log" ;xdebug 日志位置
xdebug.idekey=PHPSTORM ;ide key 对配置没啥影响 应该是做个标识
-
打个断点
-
点击这个
-
为了避免你理解混乱 换个浏览器 不要用 chrome 我这里用 safari
-
地址栏 直接访问 url
-
ide 会弹出调试终端
-
自动调试完成
以上都是在 Mac + docker 的环境下完成
如果你是 win 或者 vagrant 方式 , 大同小异的, 只是 ide 服务器那里的配置不一样 (后续我再用 win 电脑写一篇)
注: 前面说的 ide cli 解释器配置 那里不用配置, 那它具体是干嘛的呢? 请待下回分解
xdebug 3
https://blog.youkuaiyun.com/raoxiaoya/article/details/111984667
zend_extension="xdebug.so"
[xdebug]
; 默认是XDEBUG_SESSION=任何值都行, 改了之后就是XDEBUG_SESSION=VSCODE或者XDEBUG_SESSION=PHPSTORM
xdebug.trigger_value=VSCODE,PHPSTORM
; xdebug.start_with_request=yes
xdebug.start_with_request=trigger
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
# 在项目下生成, 一般不用, 写文件要io的, xdebug用不了时用来排错的挺不错的
; xdebug.log=xdebug.log
[Config] INFO: Trigger value for 'XDEBUG_TRIGGER' not found, falling back to 'XDEBUG_SESSION'
[Config] WARN: The trigger value '1', as set through 'XDEBUG_SESSION', did not match any of the shared secrets (xdebug.trigger_value) for mode 'debug'
这里的意思就是 XDEBUG_TRIGGER 参数没有, XDEBUG_SESSION的值又不等于上面自定义的值
解决方法:
1. 在地址栏带上 ?XDEBUG_TRIGGER=VSCODE 或者 ?XDEBUG_SESSION=VSCODE 都行
2. 或者在终端设置设置下面两者之一都行
export XDEBUG_TRIGGER=VSCODE
export XDEBUG_SESSION=VSCODE
远程服务器配置
xdebug.trigger_value=PHPSTORM
xdebug.start_with_request=yes
xdebug.mode=debug
xdebug.discover_client_host=1
xdebug.client_host=192.168.10.11
xdebug.client_port=9001
xdebug.log=/tmp/xdebug.log