PHP 调试 - Xdebug

article/2025/9/28 19:49:07

PHP 调试指南.pdf
PHP 程序员的调试技术

根据要调试的对象的不同,采取的方法也不一样:

  • 调试 web 应用:对于 web 应用,可以在浏览器中安装插件,或者在 IDE 中设置,下面的设置二选一即可。
    • Get/Post 请求或 Cookie 中添加 XDEBUG_SESSION_START=session_name,使 Xdebug 知道这个请求应该连接 IDE 进行调试。一般由 IDE 提供这个功能。
    • 安装浏览器插件。
  • 调试其他应用:调试命令行程序或者单元测试时,不需要在浏览器中查看效果,则省去了上面的步骤。

下载并开启 Xdebug

通过 Xdebug,可以在 IDE 的终端进行调试,可以单步调试、查看调用栈和变量值。此外,Xdebug 还可以分析性能(XHProf 也可以分析性能)。

Xdebug 支持的功能有:

  • 远程调试,原文参考:https://xdebug.org/docs/remote,译文参考:https://segmentfault.com/a/1190000011332021
  • trace 代码跟踪:trace 日志记录代码执行流程,包括时间索引、内存使用、内存增量、函数名称参数、文件名文件行等信息
  • profile 性能探查:profile 日志记录函数的执行耗时和调用关系

下载安装

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

我用的 PHP 是 7.2,64位,非线程安全的版本,所以下载 PHP 7.2 VC15 (64 bit) 这个版本的 Xdebug。

下载完成后,将其放入 PHP 安装目录下的 ext 目录。然后修改 php.ini 文件(或者专门建立独立的 ini 配置文件给 Xdebug 用)添加如下内容:

[Xdebug]
zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001

通过命令行执行 php -v,输出中包含 Xdebug 的版本信息,则表示安装成功:

C:\Users\Administrator>php -v
PHP 7.2.7 (cli) (built: Jun 19 2018 23:13:48) ( NTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologieswith Xdebug v2.7.0alpha1, Copyright (c) 2002-2018, by Derick Rethans

注意,[Xdebug] 在 Linux 需要区分大小写。

设置 Xdebug

Xdebug 是 C/S 结构,Client 是 PHP 中安装的 Xdebug,Server 是 IDE 中安装的插件。PHP 脚本运行时,Xdebug 可以向 IDE 报告运行状态,并将调试信息发送给 IDE。

Xdebug

Xdebug 有大量的配置参数可以设置,完整设置可以参考 这里,常用设置如下:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;远程调试相关设置
;用于验证服务器,只有 Xdebug 的服务器与客户端的 idekey 匹配时才会发送调试消息
xdebug.idekey="PhpStorm"
;开启远程调试
xdebug.remote_enable=on
;自动启动远程调试,对于不是 web 应用的 PHP 程序来说,必须开启
xdebug.remote_autostart=on
xdebug.remote_mode="req"
xdebug.remote_log="d://lnmp/log/phpxdebug.log"
xdebug.remote_handler="dbgp"
;远端 Xdebug 服务器的 IP 地址
xdebug.remote_host=localhost
;远端 Xdebug 服务器的端口,在 IDE 中设置
xdebug.remote_port=9001;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;trace 代码跟踪相关设置
;是否允许Xdebug跟踪函数调用,跟踪信息以文件形式存储,默认值为0。用于调试 auto_prepend_file 中的代码
xdebug.auto_trace = 1
;代码跟踪日志文件位置,默认值为/tmp。需要先新建这个目录,并设置读写权限
xdebug.trace_output_dir=d://lnmp/log/php
;函数调用跟踪信息输出文件命名规则,默认为 trace.%c
xdebug.trace_output_name=trace.%c.%p
;是否允许 Xdebug 跟踪函数参数,默认值为0
xdebug.collect_params = 4
xdebug.collect_includes = On
;是否允许 Xdebug 跟踪函数返回值,默认值为0
xdebug.collect_return = On
xdebug.show_mem_delta = On
;设置数组或者对象显示的最大层级,默认是3
xdebug.var_display_max_depth = 2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;profile 性能探查相关设置
;打开性能分析器,默认值为0
xdebug.profiler_enable=1
;性能分析文件的存放位置,默认值为/tmp。需要先新建这个目录,并设置读写权限
xdebug.profiler_output_dir=d://lnmp/log/php
;性能分析文件的命名规则,默认值为cachegrind.out.%p
xdebug.profiler_output_name=profiler.%c.%p

配置 IDE(以 PhpStorm 为例)

PhpStorm 设置项参考手册

调试非 web 应用

PHP 中的 Xdebug 配置完成后,接下来需要在 IDE 中设置 Xdebug 服务器,通过监听端口来获取代码运行状态。

添加 PHP 解释器

设置的路径:打开 IDE 后,依次选择 File | Settings | Languages & Frameworks | PHP,选择 PHP 版本和脚本位置即可。

这里写图片描述

设置 Xdebug

设置的路径:打开 IDE 后,依次选择 File | Settings | Languages & Frameworks | PHP | Debug,可以看到 Debug 相关设置。最重要的是端口号,默认是 9000,但这会跟 PHP-FPM 冲突,所以这里改为 9001。同时,需要在 php.ini 配置文件中通过 xdebug.remote_port=9001 告诉 Xdebug 客户端,服务器监听的端口号是 9001。

当前设置页面的参考手册在 这里。

Debug

调试 web 应用

Debugging PHP Web Applications with Run Debug Configurations

PhpStorm 中可以通过 Run | Edit Configuration 进入 Run/Debug Configuration 调试设置页面,在这里添加测试项目后,点击调试按钮后,IDE 会自动打开浏览器,输好网址并添加这个字符串 XDEBUG_SESSION_START=session_name
这里写图片描述

设置 Xdebug 代理

字段描述
IDE key指定代理服务器的名称以标识 IDE 中的连接。这应该是当前活动的 php.ini 配置文件中 xdebug.idekey 设置的值。
Host指定 Xdebug 代理服务器所在的主机。
Port指定在代理调试会话期间 PhpStorm 将侦听的端口。

这里写图片描述

配置 debug 参数

配置浏览器

Xdebug 和 IDE 配置完成后,就可以调试非 web 应用了。对于需要在浏览器中调试的 web 应用,还需要在浏览器中安装插件,Chrome 直接安装 Xdebug Helper 就行了,其他浏览器可以参考 这里。

插件安装好后,打开 PhpStorm 并监听 debug 连接(Run | Start Linstening for PHP Debug Connections,也就是调试工具栏中的小电话)。然后点击刚安装好的插件,选择 debugging、profiling 或 tracing 会话,在浏览器端初始化一个连接。

这里写图片描述


http://chatgpt.dhexx.cn/article/9IZ5eOKR.shtml

相关文章

php程序怎么调试,你是怎么调试PHP代码的

1.echo 这是最简单的输出数据调试方法&#xff0c;一般用来输出变量值&#xff0c;或者你不确定程序执行到了哪个分支的情况下使用。 $var 7; if (0 > $var) { // do something echo 1; }elseif (0 < $var && 5 > $var) { // do something echo 2; }elseif (…

vscode-PHP调试工具测试

[VS CODE] PHP调试环境配置步骤 STEP1 安装配置VS-Code-PHPSTEP2 安装配置XDebugSTEP3 配置VSCode调试器扩展 Wampserver32 整合部署环境&#xff0c;集成Apache服务器 MySQL PHP一体的服务器配置环境 Wampserver版本: 3.0.6 32bit PHP版本: PHP 5.6.25 XDebug Xdebug is…

vscode +phpstudy 搭建php调试环境

在进行php的学习过程中&#xff0c;需要结合具体的实操才能让自己更加深刻的理解代码&#xff0c;所以需要在自己本机搭建一个php的调试环境&#xff0c;进行调试。 这里用到的比较简单快捷的vs code加phpsutfy的方法在本地搭建调试环境。 需要用到的软件 vscode phpstudy v…

PHP调试输出的方法

PHP程序一旦出错调试是个问题&#xff0c;一般常规方法当然是用echo()函数直接在页面上输出&#xff0c;来查看变量的内容。但是这样很麻烦有些地方未必能显示调试内容。所以有大神想出办法用Google Chrome浏览器“审查元素”或者“检查”下的Console也就是控制台来显示PHP等服…

PHP调试简单方法

作为一个php新手&#xff0c;在遇到php语句错误的时候无所适从啊&#xff0c;因为没有用IDE不知道在哪里看错误信息啊&#xff0c;现在找到了一个不用修改php.ini的简单方法&#xff0c;用于调试错误&#xff0c;分享一下。 一开始测试php页面的时候发现内容木有显示&#xff0…

Visual Studio Code搭建PHP调试环境

使用Visual Studio Code搭建PHP调试环境 一.需要安装的软件 Visual Studio Code安装可以参照博文&#xff1a; https://blog.csdn.net/qq_34195507/article/details/94558862 WAMP(包括Apache、MySQL、PHP、以及最关键的XDebug) wampserver安装可以参照博文&#xff1a; …

Windows下搭建PHP调试环境(phpstudy+VScode)

Windows下搭建PHP调试环境&#xff08;phpstudyVScode&#xff09; 0x00 问题背景0x01 配套环境0x02 php Xdebug简介官方介绍&#xff1a;Xdebug扩展启用 0x03 php.ini配置0x04 vscode配置VScode下载安装VScode调试配置1. PHP Debug2. launch.json3. PHP SERVER创建调试4.FireF…

PHP开发程序调试

php程序如何调试&#xff1f; 一、PHP自带的调试功能 1、修改php.ini &#xff08;1&#xff09;开发环境 需要打开报错输出显示,方便开发者调试。 display_errors On &#xff08;2&#xff09;生产环境 不能直接将错误输出&#xff0c;而是记入日志&#xff0c;以免透…

IntelliJ IDEA 2019 配置 PHP 调试 xdebug 并进行测试

&#x1f4d6;摘要 今天分享下 —— IntelliJ IDEA 2019 配置 PHP 调试 xdebug 的一些基本知识&#xff0c;欢迎关注&#xff01; &#x1f302;分享 先创建一个php项目&#xff1a;传送门------>IntelliJ IDEA 2019 配置PHP开发环境 和 IntelliJ IDEA 2019 创建php项目 。 …

PHP 调试 - 方式

之前学 Java 的时候&#xff0c;一直使用 IDE 的 console 控制台进行调试。后来搞 PHP 后&#xff0c;习惯在代码里面 echo 和 exit&#xff0c;然后在浏览器刷新看效果&#xff0c;把单步调试、变量值查看等常用的调试方式给忘了。其实通过 IDE 集成的控制台进行调试更高效。 …

使用xdebug调试php详细教程 原创

下载xdebug扩展 将phpinfo()中的信息全部复制到Xdebug中的文本框中&#xff0c;如下图所示&#xff1a;点击“Analyse my phpinfo() output”按钮。 跳转到如下图所示页面&#xff0c;会对本机中的php进行分析&#xff0c;点击“Download php_xdebug-2.7.2-7.2-vc15-x86_64.dll…

Xdebug安装与使用

Xdebug安装与使用 为什么需要Debugger? 很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等&#xff0c;其实对 于有较丰富开发经验的程序员来说这些也已经足够了&#xff0c;他们往往可以在程序执行的过程中&#xff0c;通过输出特定变量的值可以判断程序执行是否…

Git详细教程(五):查看分支、创建分支、合并分支

一、查看分支 查看的git命令如下&#xff1a; git branch 列出本地已经存在的分支&#xff0c;并且当前分支会用*标记 git branch -r 查看远程版本库的分支列表 git branch -a 查看所有分支列表&#xff08;包括本地和远程&#xff0c;remotes/开头的表示远程分支&#xff09…

git的分支与合并的两种方法

git的分支与合并的两种方法 如何将两个分支合并到一起。就是说我们新建一个分支&#xff0c;在其上开发某个新功能&#xff0c;开发完成后再合并回主线。 1. git merge 咱们先来看一下第一种方法 —— git merge 在 Git 中合并两个分支时会产生一个特殊的提交记录&#x…

Git合并分支代码到主分支的方法总结

目录 一、简介 二、实现步骤 一、简介 在使用Git开发过程中&#xff0c;我们一般都是在develop开发分支上进行开发&#xff0c;应该比较少会在master分支上直接开发的&#xff0c;一般如果开发分支进行了一次大版本的更新并且经过测试后&#xff0c;我们就需要将代码同步到m…

Git整合分支的两种方法——合并(git merge)与变基(git rebase)的区别

转载者总结了下原文的关键句&#xff0c;补充了几个相关链接&#xff0c;得到本文。 文章目录 Git整合分支的两种方法1、合并&#xff08;git merge&#xff09;2、变基&#xff08;git rebase&#xff09; 用例子理解 合并(git merge)与变基(git rebase)的区别合并&#xff08…

git 分支合并(dev合并到master分支)

前景&#xff1a;在项目开发中&#xff0c;经常会多分支协作开发&#xff0c;所以就会遇到分支合并等问题。以下用例是将dev分支合并到master分支 1. 对当前dev分支的本地代码进行储存 1.1 如当前代码未编辑完&#xff0c;不想提交&#xff0c;即可将当前dev分支的代码暂存 gi…

Git 分支合并代码

Git 分为哪几个区&#xff1a; https://blog.csdn.net/qq_36672905/article/details/82776283 Git的区域分为 工作区、暂存区、本地仓库区 工作区&#xff08;work directory&#xff09;&#xff1a;一般就是我们项目的根目录。 本地仓库&#xff08;repository&#xff0…

git将一个分支的提交合并到另一个分支

git将一个分支的提交合并到另一个分支 Git合并指定文件到另一个分支。 经常被问到如何从一个分支合并特定的文件到另一个分支。其实&#xff0c;只合并你需要的那些commits&#xff0c;不需要的commits就不合并进去了。 1. 合并某个分支上的单个commit 首先&#xff0c;用g…

Git分支合并到另外一个分支

注意&#xff1a;不能在分支节点再新建分支节点&#xff0c;及时新建了成功了&#xff0c;分支节点也是基于master去建立的。&#xff08;已验证&#xff09; 下面来提一个需求: 需要新建两个分支&#xff0c;一个是test1另外一个是test2&#xff0c;首先在test1上开发&#…