php Xdebug 配置及调试

Faria 2023-11-05 PM 1543℃ 7条

1. 下载安装 Xdebug

1.1. pecl 方式

命令安装:

pecl install xdebug

如果想知道安装的版本可以通过下面1.2的方式看看自己可以安装什么版本

然后使用 pecl 安装:

pecl install xdebug-3.2.2

如果 php 过老,提示没有支持下载的 Xdebug,可手动去官网历史版本中取挑选下载

历史版本下载地址:https://xdebug.org/download/historical

1.2. 官网下载

下载地址:https://xdebug.org/download

可以先从这里 https://xdebug.org/wizard 查看自己的 php 支持的 Xdebug 版本

1.png

在输入框内把本机 phpinfo() 的内容贴上去

点击Analyse my phpinfo() output按钮会得到对应的版本下载地址和安装方式

2.png

简单点也通过下面的方式来查看 Xdebug 支持的 php 版本

3.png

版本对照关系来源:https://xdebug.org/docs/compat#versions

安装完且配置好之后执行php -m | grep xdebug可以看到有Xdeug

2. 配置 xdebug

2.1. php.ini 配置

我的是Xdebug版本3.x的配置,下面的都是基于3.x的配置

[Xdebug]
# 安装完 xdebug 会自动在 php.ini 里补上,如果没有则需要自己添加
zend_extension="xdebug.so"
# idekey:自定义,这里配置什么,phpstorm 里也要配置一样的
xdebug.idekey="PHPSTORM"
# 设置监听模式
xdebug.mode=debug
# 设置端口
xdebug.client_port=9010
# IDE 客户端所在的ip或主机
xdebug.client_host="localhost"
# 调试器开始记录的时间点,yes 表示运行任何 php 代码之前就开始
xdebug.start_with_request=yes
配置文件很重要,且很容易配错,如果 Xdebug 没有效果的话,
要试着了解和配置各个参数(可以看下面5.25.3小结)

2.2. phpstorm 配置

2.2.1. Xdebug 配置

设置调试端口

  • 值为配置文件中xdebug.client_port的值

4.png

设置DBGp代理

  • IDE 键:配置文件中xdebug.idekey的值
  • 端口:配置文件中xdebug.client_port的值
  • 主机:IDE 所在的 ip 或主机(同在一个主机可以设置 localhost)

5.png

图中"主机"配置和xdebug.client_host的值在特殊情况是不一样的(比如 docker 环境)

docker 环境下 php.ini 的 xdebug.client_host是 IDE 所在的主机 ip,也就是本机 ip

2.2.2 服务配置

6.png

上述第 4 步后配置服务器

7.png

名字随便起,调试器选择 Xdebug,主机和端口是本机项目的域名和端口,后续要用该域名来跑debug

此处的主机和配置文件的xdebug.client_host无关

配置完服务器确定,回到刚才的 PHP网页创建页

8.png

名字也是随便起,服务器选择刚才创建的服务,起始 URL 用 /

3. 测试

测试的方式很简单,在域名所在项目的根路径 index.php 文件中打个断点,直接访问首页就可以看到效果了,

项目里的所有位置都可以打断点,只要访问时项目能走到的地方,包含 web 和脚本都能跑 debug

4. docker 下 Xdebug 配置

docker 环境下的配置有点区别,记录一下 docker 下的配置差异

  1. 差异一:xdebug.client_host参数差异

该参数需要配置本机的ip地址

  1. 差异二:需要做目录映射

在服务器的配置中设置目录映射

9.png

左侧是 IDE 本机的项目路径,右侧是映射 docker 里面的项目路径

不做目录映断点射调试也可以打开,只不过无法逐行断点,可以先把调试调通,之后在做目录映射

5. 后记

5.1. 简单识别配置是否正确,不要盲目粘贴

网上的配置攻略参差不齐,可以从几个参数看配置符合正确

remote_hostremote_port都是 2.x 的配置

client_hostclient_port都是 3.x 的配置

5.2. Xdebug3 对比 Xdebug2 删除或替换的配置

本小结内容来源:https://blog.csdn.net/billycoder/article/details/122905908

  • xdebug.auto_trace #

使用xdebug.mode =trace和xdebug.start_with_request = yes。

  • xdebug.collect_includes #

已被删除。include()和 的文件名require()现在始终包含在开发助手和 函数跟踪输出中。

  • xdebug.collect_params #

已被删除。现在,在Development Helpers和 Function Trace输出中始终可以看到带有变量内容和参数名称的参数。

  • xdebug.collect_vars #

已移除,仅与 xdebug_get_declared_vars()功能结合使用,也已移除。

  • xdebug.coverage_enable #

使用xdebug.mode = coverage。

  • xdebug.default_enable #

使用xdebug.mode = develop。

  • xdebug.extended_info #

没有替代品。Xdebug 会在需要时自动开启这个 PHP 引擎设置。

  • xdebug.gc_stats_enable #

使用xdebug.mode = gcstats。

  • xdebug.gc_stats_output_dir #

使用通用xdebug.output_dir设置。

  • xdebug.overload_var_dump #

已被删除。PHPvar_dump()现在总是通过xdebug_var_dump()当xdebug.mode设置为 develop. xdebug_var_dump ()函数可用与配置的模式无关。

  • xdebug.profiler_enable #

使用xdebug.mode = profile。

  • xdebug.profiler_enable_trigger #

使用xdebug.mode =profile和xdebug.start_with_request = trigger。

  • xdebug.profiler_enable_trigger_value #

使用通用xdebug.trigger_value设置。

  • xdebug.profiler_output_dir #

使用通用xdebug.output_dir设置。

  • xdebug.remote_addr_header #

替换为xdebug.client_discovery_header。

  • xdebug.remote_autostart #

使用xdebug.mode =debug和xdebug.start_with_request = yes。

  • xdebug.remote_connect_back #

替换为xdebug.discover_client_host。

  • xdebug.remote_enable #

使用xdebug.mode = debug。

  • xdebug.remote_handler #

没有替代品。Xdebug 的步进调试器仅支持DBGp 处理程序。

  • xdebug.remote_host #

替换为xdebug.client_host。

  • xdebug.remote_log #

由xdebug.log 取代,其中还包括除Step Debugging之外的日志消息。

  • xdebug.remote_log_level #

替换为xdebug.log_level。

  • xdebug.remote_mode #

对于req值(原始默认值),使用 xdebug.mode =debug和 xdebug.start_with_request = trigger。如果需要原始 xdebug.remote_autostart行为,请使用 xdebug.start_with_request =yes而不是trigger.
对于该jit值,请使用xdebug.mode =debug和 xdebug.start_upon_error = yes。

  • xdebug.remote_port #

替换为xdebug.client_port。
默认值也从 更改9000为9003。

  • xdebug.remote_timeout #

替换为xdebug.connect_timeout_ms。

  • xdebug.show_mem_delta #

已被删除。可以通过比较当前帧和前一帧的使用量来计算内存使用量的差异。

  • xdebug.trace_output_dir #

使用通用xdebug.output_dir设置。

  • xdebug.trace_enable_trigger #

使用xdebug.mode =trace和xdebug.start_with_request = trigger。

  • xdebug.trace_enable_trigger_value #

使用通用xdebug.trigger_value设置。

5.3. 参数文档

Xdebug 2.x 的参数文档

http://www.xdebug.org.cn/docs/all_settings

Xdebug 3.x 的参数文档

https://xdebug.org/docs/step_debug

标签: php扩展, Xdebug

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 7 条评论


  1. peffiilkdf
    peffiilkdf

    叼茂SEO.bfbikes.com

    回复 2024-09-22 23:56
  2. uluuunppqv
    uluuunppqv

    叼茂SEO.bfbikes.com

    回复 2024-09-23 00:04
  3. kaztuuwwpr
    kaztuuwwpr

    怎么收藏这篇文章?

    回复 2024-09-27 13:53
  4. dieffgbppt
    dieffgbppt

    不错不错,我喜欢看 https://www.237fa.com/

    回复 2024-10-01 20:49
  5. qrnjtksrkw
    qrnjtksrkw

    文章的确不错啊https://www.cscnn.com/

    回复 2024-10-19 14:36
  6. goqsmpjjvc
    goqsmpjjvc

    兄弟写的非常好 https://www.cscnn.com/

    回复 2024-10-19 14:36
  7. igixdrqpyg
    igixdrqpyg

    真好呢

    回复 2024-11-14 05:02