Visual Studio Code + PHP + VirtaulBox +XDebug 代码调试

XDebug 是一个开放源代码的 PHP 程序调试器。可以用来跟踪、调试和分析 PHP 程序的运行状况。

对于简单的项目或者仅仅想知道某一位置的某个变量是什么值,直接使用 var_dump/exit 来打印和中断就可以了。而对于大型项目的调试,或想了解某个系统的整个运行过程,XDebug 可能会是更好的选择。

网上大多数 XDebug 教程中的项目代码和运行环境是配置在本地,IDE 也是在本地。而我使用的项目运行环境是运行于 VirtualBox 的虚拟机中,所以,XDebug 配置起来稍有不同。

环境介绍:

本地:Win7 + Visual Studio Code

服务器环境:CentOS7.3 + Nginx + MySQL + PHP + XDebug

虚拟机:VirtualBox

项目在本地系统当中,通过 VirtaulBox 共享文件夹功能挂载到虚拟机当中。虚拟机使用 NAT 方式联网。

1. 安装 XDebug 扩展

1.1)源码安装

$ wget http://pecl.php.net/get/xdebug-2.6.0.tgz
$ tar zxvf xdebug-2.6.0.tgz
$ cd xdebug-2.6.0
$ phpize
$ ./configure
$ make && make install

1.2)pecl 命令安装

pecl 命令是我们系统在安装 PHP 时同时安装到系统当中的。在 PHP 安装目录下的 bin 目录下。你可以查看到 php、phpize、php-config、phpecl 等常用命令。因为,我们把 PHP 的 bin 目录添加到了系统 PATH 中。所以,我们可以直接在命令行使用。

pecl 安装 XDebug 扩展非常简单。就一句命令,如下:

$ pecl install xdebug

2 配置 XDebug

2.1)在 PHP 配置文件 php.ini 当中增加 xdebug 扩展

打开 PHP 配置文件。如果,不知道配置文件在哪里。可以通过如下命令查看。

$ php --ini
Configuration File (php.ini) Path: /usr/local/php71/etc
Loaded Configuration File:         /usr/local/php71/etc/php.ini
Scan for additional .ini files in: /usr/local/php71/etc/php.d
Additional .ini files parsed:      (none)

执行会得到如上信息。准确告诉了我们 php.ini 文件的位置。然后,我们通过 vim 命令打开它,并在文件未必增加如下配置信息:

[xdebug]
zend_extension = xdebug.so
xdebug.profiler_enable = on
xdebug.remote_enable = 0
xdebug.remote_autostart = 1
;xdebug.remote_host = 192.168.28.65
xdebug.remote_port = 9000
xdebug.remote_connect_back = 1
xdebug.auto_trace = 1
xdebug.collect_includes = 1
xdebug.collect_params = 1
xdebug.remote_log = /tmp/xdebug.log

2.2 ) 测试 XDebug 扩展是否生效

要使用代码生效,我们必须重启一下 php-fpm 。

> /etc/init.d/php-fpm restart

因为在我的系统当中,已经把重启封装到了 /etc/init.d/ 目录下面。所以,如果你的系统不是这样。请按照原始的方式重启 PHP-FPM 吧。重启是为了待会调试而用。

重启之后,通过如下命令验证扩展是否存在。

> php -m|grep xdebug

如果执行此命令输出了 xdebug 说明已经安装成功了。

3 Visual Studio Code IDE 安装 PHP Debug 插件

在插件搜索框中输入“php debug” 即可点击安装。非常方便。这里不再赘述。

4 配置 launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "stopOnEntry": false,
            "localSourceRoot": "${workspaceRoot}",
            "serverSourceRoot": "/data/wwwroot/codespace/myself/hunshijian",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

launch.json 文件在哪?按组合快捷键:Ctrl + Shift + D 会打开断点调试界面。在左上角有一个设置按钮。点击这个按钮,就会打开 launch.json 文件。如图所示:

Visual Studio Code + PHP + VirtaulBox +XDebug 代码调试_第1张图片
001.png

记得这个设置按钮左边下拉框选择:"Listen for XDebug" 哟。

launch.json 文件说明:

name 给当前断点配置定义一个名称。一个配置文件里面可以配置多个。这个是针对 XDebug 进行配置。它会在上面截图设置按钮左边的下拉框中显示。
type 语言类型。设置为 php 就好了。其他语言没用过。
request 暂时不知道何意。设置为 launch 即可。
stopOnEntry 暂时不知道何意。设置为 false 即可。
localSourceRoot 本地项目源码路径。因为在调试的时候,IDE 会从这个目录寻找代码。
serverSourceRoot 服务器项目源码路径。
port 本地 IDE 在 Debug 时监听的端口。

5 开始调试

工作区中在需要调试的文件中设置断点,F5 启动调试(Listen for XDebug),编辑器上方显示 debug 浮动栏无其它报错,应该就成功了。 打开浏览器,访问项目中设置了断点的功能或页面,编辑器中会自动中断在断点处。

Visual Studio Code + PHP + VirtaulBox +XDebug 代码调试_第2张图片
002.png

在浏览器访问这个设置了断点的程序后,会自动在断点位置中断。通过 F11 快捷键,可以跟踪到后续每步的执行情况。在左侧会显示每个变量的值。

6 XDebug 在 php.ini 的更多配置说明

xdebug.extended_info

类型: integer, 默认值: 1

控制 xdebug 是否强制性开启 PHP 解析器的"extended_info"模式,这能让 Xdebug 在远端调试上做到文件/行号断点调试。当跟踪或分析脚本你通常想关闭此选项,因为 PHP 产生的数组会增加三分之一的大小减慢你的脚本。该设置只能在 php.ini 设置,不能在 ini_set() 内设置。

xdebug.idekey

类型: string, 默认值: complex

控制哪种 IDE 索引值可由 xdebug 传递到 DBGp 调试处理器。默认情况下是基于设置环境。首先环境设置 DBGP_IDEKEY 会被考虑,之后是 USER 和最后的 USERNAME。默认值会是找到第一个环境变量。如果确实找不到则该设置是默认""。如果该值有设置,它通常覆盖环境变量值。

xdebug.remote_autostart

类型: boolean, 默认值: 0

一般来说要使用一指定的 HTTP 的 GET/POST 变量启动远端调试(参考 Remote Debugging)。当设置为 1 时,Xdebug 会尝试启动一远端调试会话并试图连接到一客户端,即便是 GET/POST/COOKIE 变量并不存在。

xdebug.remote_connect_back

类型: boolean, 默认值: 0, 始于 Xdebug > 2.1

如果设置生效,xdebug.remote_host 设置会忽略而 Xdebug 会尝试给制造 HTTP 请求的客户端进行连接。它会检查 $_SERVER['REMOTE_ADDR'] 变量并找出使用的 IP 地址。请记住它没有有效的过滤,任何人都能启动调试会话连接到服务器,即使他们的地址并不匹配 xdebug.remote_host.

xdebug.remote_cookie_expire_time

类型: integer, 默认值: 3600, 始于 Xdebug > 2.1

用于增减远端调试会话的cookie存在时间。

xdebug.remote_enable

类型: boolean, 默认值: 0

该开关控制 Xdebug 试图与调试客户端通讯,客户端通过设置 xdebug.remote_host 和 xdebug.remote_port 侦听服务器和端口当。当设置为0,脚本仅仅是运行而连接不能被建立。

xdebug.remote_handler

类型: string, 默认: dbgp

可改为 'php3' 使用旧的 PHP3 样式调试器输出,'gdb' 能使 GDB 生效类似于调试器接口,或是 'dbgp' 使用调试器协议。DBGp 协议是唯一支持的协议。

注意:2.1或以上版本只支持'dbgp'作为协议。

xdebug.remote_mode

类型: string, 默认值: req

选择当调试连接的模式。有两种值:

req

当调试客户端一启动脚本运行,Xdebug 尝试连接到调试客户端。

jit

只有在错误发生时,Xdebug 才会连接到调试端。

xdebug.remote_port

类型: integer, 默认值: 9000

Xdebug 试图连接到远端服务器的端口。端口 9000 是默认客户端与绑定的调试客户端关连端口。许多客户端都用此端口号,建议最好不要改。

你可能感兴趣的:(Visual Studio Code + PHP + VirtaulBox +XDebug 代码调试)