PHP 调试 - Xdebug

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

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

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

下载并开启 Xdebug

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

Xdebug 支持的功能有:web

下载安装

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

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

下载完成后,将其放入 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 Technologies
    with 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 会话,在浏览器端初始化一个链接。

这里写图片描述

相关文章
相关标签/搜索