使用 Xdebug 调试 PHP

Xdebug是一款功能强大的PHP调试和分析工具,可以帮助我们分析和优化PHP应用程序。它支持逐步调试、性能测量和堆栈跟踪等功能,使故障排除变得更加容易,并提供对代码的更好洞察。以下是在 VSCode 中使用的小型设置指南。


安装Xdebug

作为示例,我们在当前的 Ubuntu 系统上安装 Xdebug:

sudo apt-get install -y php8.4-xdebug

最后,我们创建一个临时目录,用于以后存储分析和跟踪数据:

mkdir -p /tmp/xdebug

配置Xdebug

安装完成后,我们配置Xdebug。为此,我们编辑它 zh-cn/php.ini:

vi /etc/php/8.4/fpm/conf.d/custom.ini

以下是合理的基本配置:

[xdebug]
; mode (see: https://xdebug.org/docs/all_settings#mode)
;   reasonable default
xdebug.mode=debug,profile
;   disabled
;xdebug.mode=off
;   step debugging
;xdebug.mode=debug
;   performance profiling (be aware of load/space)
;xdebug.mode=profile
;   trace profiling (record args)
;xdebug.mode=trace

; starting mode
;   always (not recommended)
;xdebug.start_with_request=yes
;   only when specific get parameters / cookies are set
;   (?XDEBUG_TRIGGER=1, ?XDEBUG_PROFILE=1, ?XDEBUG_TRACE=1, ?XDEBUG_SESSION=1)
;   this is best in conjunction with Chrome extension "Xdebug helper"
xdebug.start_with_request=trigger
;   folder for analyzing profile dumps
xdebug.output_dir="/tmp/xdebug"
;   not needed, since it is already in /etc/php/8.4/fpm/conf.d/20-xdebug.ini
;zend_extension=xdebug.so

进行这些调整后,我们重新启动 PHP-FPM 以应用更改:

sudo service php8.4-fpm restart

配置 VSCode

要在 Visual Studio Code 中使用 Xdebug,需要两个扩展和配置调整。我们安装这个:

最后我们在待分析项目的.vscode文件夹下创建launch.json配置文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "ignore": ["**/vendor/**/*.php"]
        }
    ]
}

安装 Chrome 扩展程序

Xdebug 帮助程序扩展已证明可以在浏览器中进行灵活的调试。这使得仅在必要时才启用或禁用 Xdebug 成为可能。您还可以轻松更改调试模式(例如,从调试切换到分析):

配置 WordPress

在 WordPress 环境中使用 Xdebug 时,在调试会话处于活动状态时禁用 cron 作业中的调试可能会很有用。这使得调试请求变得更加容易。为此,请将以下行添加到: wp-config.php 一个:

// disable wp cron on xdebug sessions
if (function_exists('xdebug_is_debugger_active') && xdebug_is_debugger_active()) {
    define('DISABLE_WP_CRON', true);
}

通过此配置,我们拥有了强大的设置,使我们能够精确地解决复杂的调试问题。无论是查找顽固的错误还是微调性能问题 - Xdebug 不仅使工作更加高效,而且还通过对代码的控制和清晰度为开发带来了新的质量。

背部