前言

断点调试虽然使用的不多,但是到了需要用到的时候去配置却发现记不得具体的配置步骤,非常苦恼。现在docker使用比较普遍,这里记录一下 phpstorm + docker + xdebug 的断点调试配置,开发环境使用dnmp搭建。

一、软件版本

  • windows10 + wsl2
  • phpstorm: 2023.1.2
  • php: 8.2.2
  • xdebug: 3.2.2

二、配置步骤

配置xdebug

  1. 在php.ini文件中加入如下配置
[XDebug]
xdeubg.mode=develop,debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_post=9003
  1. 重启php docker容器(是为了重启php-fpm,不重启配置无法生效)

  2. 查看php容器日志

2023-10-04 11:21:55 [04-Oct-2023 11:21:55] NOTICE: fpm is running, pid 1
2023-10-04 11:21:55 [04-Oct-2023 11:21:55] NOTICE: ready to handle connections

  1. 在浏览器中发起请求

http://test.com/index.php

这是本地的虚拟域名,根据实际情况替换。

  1. 再观察php容器日志,发现

2023-10-04 11:22:00 NOTICE: PHP message: Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port).
2023-10-04 11:22:00 172.18.0.4 - 04/Oct/2023:11:22:00 +0800 “GET /index.php” 200

说明配置生效,服务器断点调试已经开启,接下来配置PhpStorm。

PhpStorm启动调试模式

在这里插入图片描述

  1. 再次在浏览器发起请求

在这里插入图片描述

  1. 点击Accept按钮,右下角显示以下弹窗

在这里插入图片描述

  1. 不用管这个,继续下一步,添加断点

在这里插入图片描述

  1. 再次发起请求,发现连接成功,接下来就可以开发调试了。

在这里插入图片描述

实际开发中我们不希望每次请求都进行断点调试,可以修改xdebug配置,去掉

xdebug.start_with_request=yes

这行配置,或者将值修改为no,然后在需要断点调试时,请求中添加一个XDEBUG_SESSION参数,如下

http://test.com/index.php?XDEBUG_SESSION=1

在不需要断点调试时,删除这个参数,这样就可以动态控制断点调试的状态了。XDEBUG_SESSION的值可以为任意值,除了作为GET参数,作为POST参数和COOKIE都可以生效。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐