如何通过Xdebug和VSCode实施PHP调试

如何通过Xdebug和VSCode实施PHP调试

在开发网络应用程序时,您必须注意一些事项,以便顺利交付最终产品。优秀的开发人员在创建强大的应用程序时会遵循最佳开发实践,包括测试、调试等。

本文将讨论 PHP 调试概念和编码技术。请继续阅读,了解有关 PHP 调试的更多信息。

你可以在不进行任何配置的情况下开始调试。但是,只有在需要连接到已配置 Xdebug 的现有 Web 服务器或希望快速运行和调试 PHP 脚本时,才建议这样做。

让我们从最基本的调试开始,在编写 PHP 代码时,往往会使用 print_r()、var_dump() 命令来调试已编写代码的输出。我们有许多 PHP 调试工具,可以让用户在编码过程中敦促修复错误,还有一些函数可以在代码失败时显示正确的输出或错误/警告。虽然这种 PHP 调试技术很基本,但仍在使用。

什么是PHP错误日志?

PHP 错误日志是开发人员识别和解决应用程序问题的非常有用的工具。PHP 错误日志会显示脚本运行时与错误、通知和警告有关的所有信息,例如错误类型、错误出现在哪个文件上以及发生错误的实际行号。通过这些日志,开发人员可以实时识别故障,并通过研究它们来实施修复措施。

PHP错误日志为何重要?

  • 调试: 错误日志有助于确定代码中的语法错误、运行时错误和逻辑错误。
  • 性能监控: 它们可以识别性能瓶颈或低效代码点。
  • 安全性: 日志可以告诉你潜在的漏洞或试图通过未经授权的方式进行访问的情况。
  • 生产安全: 在生产过程中,错误日志可帮助您跟踪问题,而不会向用户透露敏感信息。

PHP错误日志配置

要启用和设置 PHP 错误日志,必须更改 php.ini 文件中的设置或使用运行时指令(如 ini_set())。

I. php.ini 主要指令:

这些是错误日志的主要指令:

log_errors:打开或关闭错误日志记录。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
log_errors = On
log_errors = On
log_errors = On

error_log:这是记录错误的地方。请使用绝对路径,以便一目了然。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
error_log = /var/log/php_errors.log
error_log = /var/log/php_errors.log
error_log = /var/log/php_errors.log

error_reporting:指定要记录的错误类型。例如:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
error_reporting = E_ALL
error_reporting = E_ALL
error_reporting = E_ALL

E_ALL:记录所有错误、警告和通知。

E_ERROR | E_WARNING:记录致命错误和警告。

II. 通过.htaccess(按目录)记录日志:

如果由于访问受限而无法访问或修改 php.ini,您可以通过.htaccess 按目录记录日志。您可以在您关注的应用程序 .htaccess 文件中添加以下代码块:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php_flag log_errors On
php_value error_log /path/to/php_errors.log
php_flag log_errors On php_value error_log /path/to/php_errors.log
php_flag log_errors On
php_value error_log /path/to/php_errors.log

III. 使用 ini_set()进行运行时配置:

您还可以在 PHP 脚本中添加以下代码块,动态启用日志记录功能:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ini_set('log_errors', 'On');
ini_set('error_log', '/path/to/php_errors.log');
ini_set('log_errors', 'On'); ini_set('error_log', '/path/to/php_errors.log');
ini_set('log_errors', 'On');
ini_set('error_log', '/path/to/php_errors.log');

查看 PHP 错误日志

PHP 错误日志的保存方式因主机配置而异:

1. 默认位置:

  • 对于 Linux 服务器:/var/log/php_errors.log 或 /var/log/syslog
  • 对于 Windows 服务器:事件查看器(如果 error_log 配置为 syslog)

2. 宝塔面板位置:

对于使用宝塔面板管理的服务器,您可以按照以下步骤轻松查看日志:

  • 登录宝塔面板。
  • 进入【软件管理】或【运行状态】页面。
  • 找到【日志管理】或【错误日志】选项。
  • 在【PHP 错误日志】部分查看具体的错误信息。

阅读PHP错误日志

PHP 错误日志会提供一个信息条目,描述发生了什么。下面是一个日志条目示例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[13-Mar-2025 12:00:00 UTC] PHP Fatal error: Uncaught Exception: Database connection failed in /var/www/html/index.php on line 25
[13-Mar-2025 12:00:00 UTC] PHP Fatal error: Uncaught Exception: Database connection failed in /var/www/html/index.php on line 25
[13-Mar-2025 12:00:00 UTC] PHP Fatal error: Uncaught Exception: Database connection failed in /var/www/html/index.php on line 25

日志信息细分:

  • 时间戳:[13-Mar-2025 12:00:00 UTC] (世界协调时)
  • 错误类型:PHP 致命错误
  • Message:Uncaught Exception:数据库连接失败
  • 文件和行号: /var/www/html/index.php,第 25 行

PHP错误日志最佳实践

您需要区分开发设置和生产设置,具体如下。

在开发环境设置中,可以包括以下内容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
display_errors = On
log_errors = On
error_reporting = E_ALL
display_errors = On log_errors = On error_reporting = E_ALL
display_errors = On
log_errors = On
error_reporting = E_ALL

在生产环境设置中,可以包括以下内容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors = Off log_errors = On error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
  • 轮换日志文件:利用日志轮换工具(如 logrotate)避免日志文件过大。
  • 保护日志文件:通过文件权限限制日志文件的访问(例如,chmod 600 /path/to/php_errors.log),防止未经授权的访问。
  • 定期监控日志:利用 Rollbar 或 Loggly 等监控软件进行实时日志分析。
  • 特定框架日志(如 Laravel):如果您使用的是 Laravel 或 Symfony 等框架,请使用其内置日志,以实现更紧密的集成和更大的灵活性。

什么是PHP调试驱动开发?

早些时候,我并不清楚调试驱动开发(DDD)这个术语,但我是从一个调试员朋友那里得到这个想法的。他的代码中包含多个断点,他通过每一行的响应直到得到想要的输出。DDD 的流程与 TDD 类似,首先定义所有 PHP 调试技术的配置,然后编写代码,以便在出现错误时进行调试。一旦对 DDD 有了一定的了解,就应该学习Xdebug,它可以帮助你理解 PHP 调试驱动开发的概念。使用 Xdebug 运行 PHP,可以全面了解错误、响应和代码覆盖范围。

什么是Xdebug?

想象一下,你已经写好了代码,但在编译时却出现了错误。最糟糕的是,你无法确定出错的原因。Xdebug 就是你的救星。

Xdebug 是一个 PHP 扩展,它能帮助开发人员调试并顺利开发项目,从而发现错误并解决它们。它升级了 PHP 的 var_dump()函数,并添加了通知、警告、错误和异常的堆栈跟踪。

Xdebug 使用 DBGp 调试协议,提供调试和剖析功能。它允许我们添加断点,并在每个断点停止代码执行,以查看仅在一次代码迭代中输出的变量。

因此,Xdebug 可以让你节省时间,否则就会在代码调试中浪费时间。如果没有 Xdebug,你必须刷新页面才能再次看到输出。您还可以设置独立方法的断点,以查看是哪个方法导致了问题。

此外,你还可以在代码中添加任意数量的断点,并使用 PHP 调试器逐行检查每行代码。

在PHP中安装Xdebug

现在是在 PHP 中安装 Xdebug 的时候了。有几种安装 Xdebug 的方法。

Windows:

对于 Windows 用户,Xdebug 提供了一个向导工具,您可以通过它下载相关的 .dll 文件。为此,首先在文件夹中创建一个 PHP 文件,并添加以下代码行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
phpinfo();
?>
<?php phpinfo(); ?>
<?php
phpinfo();
?>

在浏览器中运行该文件。您将看到 PHP 信息。复制详细信息并将其放入向导工具,然后点击 Analyze my phpinfo() output 按钮。

Analyze my phpinfo() output 按钮

输出结果如下:

windows pckg

现在,下载 .dll 文件并按照上述说明将文件放入 xampp/php/ext 目录。接下来,按照步骤 3 在 php.ini 文件中启用 Xdebug,最后重启网络服务器。

MAC

可以使用 pecl 扩展安装 PHP7 Xdebug:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pecl install xdebug
pecl install xdebug
pecl install xdebug

Linux

在 Debian 等 Linux 发行版中,可以使用 Sudo 在 PHP 中安装 Xdebug:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install php-xdebug;
sudo apt install php-xdebug;
sudo apt install php-xdebug;

现在,打开 etc/php/7.0/mods-available/xdebug.ini 文件,添加以下代码启用 Xdebug:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
xdebug.profiler_enable_trigger = 1
xdebug.profiler_enable = 0
xdebug.remote_enable = 1
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_enable_trigger = 1 xdebug.profiler_enable = 0 xdebug.remote_enable = 1 xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_enable_trigger = 1
xdebug.profiler_enable = 0
xdebug.remote_enable = 1
xdebug.profiler_output_dir = "/tmp"

现在,重新启动 Apache2 服务器。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service apache2 restart;
sudo service apache2 restart;
sudo service apache2 restart;

GIT

你也可以从 GitHub 克隆它。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
git clone git://github.com/xdebug/xdebug.git
git clone git://github.com/xdebug/xdebug.git
git clone git://github.com/xdebug/xdebug.git

安装 Xdebug 后,打开 php.ini 文件并启用扩展。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
zend_extension="xdebug.so"
zend_extension="xdebug.so"
zend_extension="xdebug.so"

现在,使用 `php -v` 命令检查 PHP 版本。您将看到与 PHP 一起安装的 Xdebug 版本。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ php -v
PHP 7.2.0RC6 (cli) (built: Nov 23 2017 10:30:56) ( NTS DEBUG )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies
with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans
$ php -v PHP 7.2.0RC6 (cli) (built: Nov 23 2017 10:30:56) ( NTS DEBUG ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans
$ php -v
PHP 7.2.0RC6 (cli) (built: Nov 23 2017 10:30:56) ( NTS DEBUG )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies
 with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans

在VSCode中配置Xdebug

如果你想使用 Xdebug 实现流畅的工作流程,可以将其集成到你喜欢的集成开发环境中,如 phpstorm、Zend studio 和 VScode。让我们在 Visual Studio Code 中配置 Xdebug 来调试 PHP。

VSCode PHP 扩展名为 PHP Debug。你可以在扩展窗口中找到并安装它。

PHP Debug

安装完成后,必须重新加载 VSCode 窗口。现在,再次运行任何 PHP 文件中的 phpinfo(); 方法,检查是否启用了 Xdebug。

现在点击调试控制台选项卡,然后点击 add configuration

在VSCode中配置Xdebug

现在,你必须选择 PHP 环境。VSCode 将在根目录下添加 launch.json 文件。

添加 launch.json 文件

最后,将 runtimeExecutable 属性添加到 port 之后的列表中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"runtimeExecutable": "C:\\xampp\\php\\php.exe"
"runtimeExecutable": "C:\\xampp\\php\\php.exe"
"runtimeExecutable": "C:\\xampp\\php\\php.exe"

保存 launch.json 文件。打开调试模式选项卡,点击绿色调试按钮启动调试选项。

打开调试模式选项卡

现在,您将在窗口中看到几个项目,通过这些项目,您可以选择 Xdebugger 将显示哪些日志:

  • 通知
  • 警告
  • 错误
  • 异常
  • 所有内容

导航至调试控制台部分,该部分将显示错误详情和顶部的调试执行按钮。

此时,你可以在需要调试的代码行上添加断点。请注意,Xdebug 会在左下方添加 PHP 调试脚本名称和行号:

调试的代码行上添加断点

您可以在浏览器中运行应用程序,然后逐行阅读代码,查看错误并正确调试。此外,你还需要提醒几个快捷功能键,以便在函数和代码行中移动:

  • F5:继续调试(Continue Debugging)
  • F10:单步跳过(Step Over)
  • F11:进入函数(Step into)
  • Shift + F11:跳出函数( Step out)

xdebug快捷功能键

Xdebug性能分析

Xdebug 还提供代码性能分析功能,就像其他剖析工具 Blackfire 和 Tideways 一样。如果要使用分析选项,必须在 php.ini 文件中启用它。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
xdebug.profiler_enable=1 xdebug.profiler_output_dir="C:\xampp\tmp"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"

现在,打开一个文件,开始输入所有分析日志。

小结

调试是编码的一个重要方面;没有调试,就无法知道代码出了什么问题。

本文演示了如何使用 Xdebug 启用 PHP 调试并在 VSCode 中进行配置。您还可以将其集成到 Eclipse、PHPstorm 和其他集成开发环境中。

对于那些涉足大量编码领域的人来说,建立一个强大的调试环境至关重要。尤其是在处理跨越数千行的复杂应用程序时,安装一个 PHP 调试器对发现错误和警示信号至关重要。有了先进工具的帮助和 PHP 虚拟主机的可靠性,你就有能力驾驭复杂的编码,确保无缝的开发体验。

如果您想了解更多信息,请在下面的评论部分提出您的疑问和建议。

常见问题

Q. 如何在 PHP 中调试?

A. 要调试 PHP,可以使用像Xdebug 这样的工具,它允许你设置断点、检查变量和逐步浏览代码。基本调试可以使用 var_dump()print_r() 或 error_log()。要进行更有条理的调试,可启用 PHP 错误日志,并使用 Visual Studio Code PhpStorm 等集成开发环境的调试功能。

Q. 如何启用 PHP 调试模式?

A. 要启用调试模式,请修改php.ini文件,设置

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
display_errors = On
error_reporting = E_ALL
display_errors = On error_reporting = E_ALL
display_errors = On
error_reporting = E_ALL

对于生产环境,记录错误而不是显示错误:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
log_errors = On
error_log = /path/to/logfile.log
log_errors = On error_log = /path/to/logfile.log
log_errors = On
error_log = /path/to/logfile.log

Q. PHP 易于调试吗?

A. 是的,PHP 很容易使用内置函数进行调试,如 var_dump()echo 和 print_r()。对于更高级的调试,Xdebug等工具允许分步调试、断点和堆栈跟踪,从而更容易发现问题。

Q. 如何为 PHP 添加调试功能?

A. 可以用以下方法为 PHP 添加调试:

  • 错误报告:在脚本中启用错误报告功能:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    error_reporting(E_ALL); ini_set('display_errors', 1);
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
  • 记录日志:配置 PHP 以在 php.ini 中记录错误或使用 error_log('Error message');
  • Xdebug:安装并配置用于高级调试的 Xdebug。
  • 调试功能:使用 var_dump()print_r() 或 debug_backtrace()检查变量和执行流。

Q. 如何用 Xdebug 和 VSCode 调试 PHP?

A. 在 VSCode 中使用 Xdebug 调试 PHP:

  1. 安装 Xdebug 并配置php.ini
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    zend_extension=xdebug
    xdebug.mode=debug
    xdebug.start_with_request=yes
    xdebug.client_host=127.0.0.1
    xdebug.client_port=9003
    zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=127.0.0.1 xdebug.client_port=9003
    zend_extension=xdebug  
    xdebug.mode=debug  
    xdebug.start_with_request=yes  
    xdebug.client_host=127.0.0.1  
    xdebug.client_port=9003
  2. 在 VSCode 中安装 PHP Debug 扩展。
  3. 在 VSCode 中添加 launch.json 配置文件。
  4. 在 PHP 代码中设置断点并开始调试。

Q. 如何在 VSCode 中设置 PHP 调试可执行路径?

A. 要在 VSCode 中设置 PHP 的执行路径,请打开“设置”并搜索php.executablePath,然后提供 PHP 安装的完整路径,例如

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"php.executablePath": "C:/xampp/php/php.exe"
"php.executablePath": "C:/xampp/php/php.exe"
"php.executablePath": "C:/xampp/php/php.exe"

评论留言