PHP调试跟踪之XDebug使用总结:

Xdebug是一个开源的PHP程序调试工具,可以使用它来调试、跟踪及分析程序运行状态。当然,Xdebug需要结合PHP的编辑工具来打断点、跟踪、调试及分析,比较常用的PHP的Xdebug调试环境:Vim +Xdebug。

·     安装配置

·     调试环境

·     跟踪分析

·     注意事项

·     遇到问题

一、安装配置

Xdebug的安装是作为PHP的拓展而存在的,所以可参考PHP拓展文章:

http://blog.csdn.net/why_2012_gogo/article/details/51120645

php.ini:

[xdebug]

;基本调试配置

xdebug.auto_trace = on

xdebug.collect_params = on

xdebug.collect_return = on

xdebug.profiler_enable = on

xdebug.profiler_output_dir ="/php/ext/xdebug_profilers"

xdebug.trace_output_dir = "/tmp/ext/xdebug_traces"

;远程调试设置

xdebug.remote_enable = on

xdebug.remote_host = localhost

xdebug.remote_port = 9010

xdebug.remote_autostart = on

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so

NOTE:

上面罗列的是最为常用的配置选项,至于其他配置选项及对应的含义,请参考:

https://xdebug.org/docs/all_settings#auto_trace

二、调试环境

Vim + Xdebug:

http://www.vim.org/scripts/script.php?script_id=1929

$ cd  ~

$ sudo mkdir ~/.vim

将上面下载的xdebug的plugin中文件复制到.vim下:

$ sudo cp –r /php/ext/plugin  .

在用户主目录下创建.vimrc文件:

$ sudo touch /usr/share/vim/vimrc  ~/.vimrc

$ sudo vim ~/.vimrc

为.vimrc添加以下内容:

let g:debuggerPort = 9010(该端口必须与xdebug.remote_port相同)

let g:debuggerMaxDepth = 5(代表数组调试深度配置)

NOTE:

vimrc文件是vim的主要配置文件,它包含两个版本:全局版本和用户版本,我们建议修改用户版本的vimrc配置文件,这两种版本的路径可在vim普通模式下查看,如下:

全局版本路径查看:

$ sudo vim

$ :echo $VIM

路径地址:/usr/share/vim

用户版本路径查看:

$ sudo vim

$ :echo $HOME

路径地址:$HOME(pwd ~)

g:debuggerPort的端口号,必须与xdebug.remote_port相同;

g:debuggerMaxDepth代表的是脚本调试的最大深度层次;

最后,修改完php.ini、.vimrc配置后,记得重启php-fpm。

A、准备一个php文件

$value = '马上使用XDebug调试程序,你准备好了吗';

echo $value;

将上面的文件放入到你的Web根目录下,我的访问地址是:

http://localhost/xdebug.php 测试下是否正常显示。

B、使用vim打开php文件

使用vim普通模式打开php文件,移动鼠标箭头到欲调试的那行,输入:

截图如下:

然后,按下F5(Mac:Fn+F5),开始监听调试事件,这时在编辑窗底部提示5秒内访问要调试的php文件,例如:

http://localhost/xdebug.php ? XDEBUG_SESSION_START=1

截图如下:

对于调试中的操作在下面附加上:

类型

功能

说明

<Command Mode>

:Bp

toggle breakpoint

断点标记

:Up

stack up

:DN

stack down

<Normal Mode>

,e

eval

<Function Keys>

F1

resize

调整窗口大小

F2

step into

调试步进入

F3

step over

调试步进入下一标记

F4

step out

调试步出当前标记

F5

run

调试运行

F6

quit debugging

退出调试模式

F11

get all context

获得所有变量内容

F12

get property of cursor

获得当前光标变量

三、跟踪分析

1、代码覆盖分析

Xdebug 2.2开始支持对代码覆盖的分析,也就是通过对代码的覆盖分析,我们可以了解到在IDE访问期间,有哪些代码行数被执行了,有助于对核心代码和单元测试有针对性的了解和分析,最终提高代码的质量。

A、涉及的配置

xdebug.coverage_enable=1

//该配置默认为1,也就是默认开启,如果设置为0,代码的覆盖分析就不会进行。

B、涉及的函数

boolean xdebug_code_coverage_started()

//该函数返回布尔值,用来判断代码覆盖分析功能是否开启,未开启则返回false。

void xdebug_start_code_coverage( [int options] )

//该函数没有任何返回,它的作用是开始搜集分析结果集数据,数据是以二维数组形势//存在,一维参数为分析的文件名字,二维参数为对应的分析行数;另外,在分析文件

//的每行代码时,都会产生一个结果码,如下:

//1:代表代码已经执行;

//-1:代表代码未被执行,对应函数参数XDEBUG_CC_UNUSED传入;

//-2:代表没有可执行的代码存在,对应XDEBUG_CC_DEAD_CODE和XDEBUG_CC_UNUSED

NOTE:

XDEBUG_CC_UNUSED:用来计算分析时包含搜集未被执行的代码;

XDEBUG_CC_DEAD_CODE:用来计算分析时代码行是否被执行;

形式如下:

xdebug_start_code_coverage(XDEBUG_CC_UNUSED|XDEBUG_CC_DEAD_CODE);

array xdebug_get_code_coverage()

//该函数返回数组值,用来搜集和返回代码覆盖分析的结果集信息。

void xdebug_stop_code_coverage( [int cleanup=true] )

//该函数不返回任何值,用来停止覆盖分析,如果传入参数为true,那么就会停止分析并清空内存中的分析结果集,否者传入false,反之,还可使用//xdebug_start_code_coverage找回该内存信息。

C、示例的验证

Php代码:

echo '覆盖分析进行中...</br>';

// 构建封装对象

class XdebugCoverageAnalysisModel {

private $_coverage_info;

private $_status;

function __construct() {

$this->_coverage_info = xdebug_get_code_coverage();

$this->_status =xdebug_code_coverage_started();

// 获取分析结果

public functiongetCodeCoverageResult() {

returnjson_encode(xdebug_get_code_coverage());

// 开启覆盖分析

public functionxdebugStartCodeCoverage() {

xdebug_start_code_coverage( -1 | -2 );

// 分析是否执行

public functionxdebugCodeStarted() {

return xdebug_code_coverage_started();

// 初始化

$apiModel = new XdebugCoverageAnalysisModel();

echo '开启覆盖分析...</br>';

$apiModel->xdebugStartCodeCoverage();

// 定义一个测试函数

function coverageSample($a,$b) {

echo '函数结果:'.($a * $b).'</br>';

echo '判断是否开启...</br>';

$status = $apiModel->xdebugCodeStarted();

if($status=='1') {

echo '开启覆盖分析已完成</br>';

} else {

echo '开启覆盖分析失败了</br>';

echo '测试函数开启...</br>';

coverageSample(10,10);

echo '获取分析结果...</br>';

$result = $apiModel->getCodeCoverageResult();

echo $result.'</br>';

echo '关闭分析开关...</br>';

xdebug_stop_code_coverage();

$status = $apiModel->xdebugCodeStarted();

if($status=='1') {

echo '覆盖分析已经完成</br>';

} else {

echo '覆盖分析已经关闭!</br>';

unset($result);

unset($apiModel);

浏览器结果:

2、PHP脚本分析

Xdebug的PHP脚本分析功能比较实用,它可以帮助我们分析代码的瓶颈和影响性能缓慢的问题,为优化代码提供可行性的参考。

A、涉及的配置

xdebug.profiler_enable

//该配置默认为0,为开启,设置为非0之后,即开启profiler功能

xdebug.profiler_output_dir

//该配置为上面开启之后,存放生成分析文件的位置,需要保证位置可写入,默认/tmp

xdebug.profiler_enable_trigger

//如果开启该选项,则在每次请求中如果GET/POST或cookie中包含//XDEBUG_PROFILE变量名,则才会生成性能报告文件(前提是必须关闭

//xdebug.profiler_enable选项,否则该选项不起作用)。

xdebug.profiler_output_name

//可以使用该配置修改生成的分析文件,默认 cachegrind.out.%p

NOTE:

建议使用 xdebug.profiler_enable_trigger 替代 xdebug.profiler_enable

B、涉及的函数

string xdebug_get_profiler_filename()

//返回类型为字符串,用来返回分析的文件名字

C、示例的验证

当我们开启分析开关之后,当有脚本运行就会在指定的位置生成格式为cachegrind.out.xxx的分析文件:

该文件的内容不是很直观,所以需要使用可视化的工具来查看和分析,而Xdebug本身就支持使用第三方的可视化profiler文件的内容。在Linux下,可以使用KCacheGrind,而在Windows平台,可以使用QCacheGrind,当然还有一些在线的由爱好者开发的工具,例如:WebGrind,具体怎样使用这些工具,可以参考:

https://xdebug.org/docs/profiler

下面罗列下,WebGrind的效果:

WebGrind可以在这里下载:

https://github.com/jokkedk/webgrind

四、注意事项

1、避免生产环境开启profiler和trace,只需开启远程调试;

2、尽量使用 xdebug.profiler_enable_trigger 替代xdebug.profiler_enable;

3、如果使用webgrind分析profiler,建议不要放入生产环境,因为其没有安全限制,任何人都可以访问;

4、Xdebug的功能虽然强大,但是要均衡性能开销;

五、遇到问题

问题:Error("DbgProtocol instance has no attribute 'stop'",)

产生该问题的原因大致如下:

A、配置文件配置不正确;

B、.vimrc和php.ini中的port不相同;

C、.vimrc和php.ini中的port与现有的port冲突;

对照上面的几条仔细查看配置即可。

NOTE:

有博客说因为未在URL后添加XDEBUG_SESSION_START=1,其实不然。

技术讨论群:489451956 (新)

Xdebug是一个开源的PHP程序调试工具,可以使用它来调试、跟踪及分析程序运行状态。当然,Xdebug需要结合PHP的编辑工具来打断点、跟踪、调试及分析,比较常用的PHP的Xdebug调试环境:Vim + Xdebug。• 安装配置• 调试环境• 跟踪分析• 注意事项• 遇到问题 RUN set -ex; \ wget http:// xdebug .org/files/ xdebug -2.8.0.tgz; \ tar -xzvf xdebug -2.8.0.tgz; \ cd ./ xdebug -2.8.0; \ php ize; \ ./configure --enable- xdebug ; \ make && make install COPY xdebug .ini /usr/local/etc/ php /conf.d/ma
为什么需要Debugger? 很多 PHP 程序员 调试 使用 echo、print_r()、var_dump()、printf()等,其实对 于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以 看出来(当然可能还需要 使用 一些时间函数)。那么我们为什么还需要一个专门的 调试 程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓。 什么是 Xdebug ? Xdebug 是一个开放源代码的 PHP 程序 调试 器(即一个Deb.
Xdebug 是一个开源的 PHP 程序代码 调试 工具,可以用来 跟踪 调试 和分析 PHP 程序的运行状况。大多数情况下,它是作为 PHP 的一个扩展模块来运行的。 下载 Xdebug 模块 到目前为止, Xdebug 的最新版本为2.2.4,你可以前往 Xdebug 官方网站下载与自己的 PHP 版本
之前整理在印象笔记中,现在搬出来。分本地 调试 和远程 调试 。本文亲测通过并截图,有问题欢迎留言探讨。 (参考网上多位前辈的博客,整理在笔记里忘记保存原文链接,这里无法贴出链接,望见谅) 一般 php 项目 调试 都用echo, var_dump()之类的函数 调试 ,项目大的话很不方便,也很低效; 安装 xdebug 扩展; 官网https:// xdebug ...
### 回答1: Xdebug 是一个用于 PHP 调试 器和分析器。它可以帮助您 跟踪 代码执行、查看变量值和调用堆栈等。要 使用 Xdebug ,您需要在 PHP 中安装和配置它。步骤如下: 1. 下载并安装 Xdebug 扩展。 2. 编辑 php .ini 配置文件,启用 Xdebug 扩展。 3. 设置 IDE 或编辑器来 使用 Xdebug 。 4. 使用 Xdebug 进行 调试 。 如果您 使用 的是 Windows 系统,可以 使用 PECL 命令安装 Xdebug : pecl install xdebug 如果您 使用 的是 Linux 系统,可以 使用 以下命令安装 Xdebug : sudo apt-get install php - xdebug 然后,编辑 php .ini 文件启用 Xdebug 扩展: zend_extension = /usr/lib/ php /20151012/ xdebug .so 并设置 IDE 或编辑器来 使用 Xdebug 进行 调试 ,例如在 Php Storm中设置即可。 如果您想了解更多关于 Xdebug 的信息,请访问官网:https:// xdebug .org/ ### 回答2: PHP Xdebug 是一个用于 调试 PHP 程序的工具。它提供了一些强大的功能,帮助开发人员在开发和 调试 过程中更加高效地查找和解决问题。 使用 Xdebug 的第一步是将其安装到 PHP 环境中。一般来说,可以通过厂商提供的包管理器(如 PECL),或者手动下载源代码编译安装。安装完成后,需要在 PHP 配置文件中启用 Xdebug 扩展。 一旦安装和启用 Xdebug ,我们就可以开始 使用 其提供的功能了。其中最常用的功能是代码断点 调试 。我们可以在代码中设置断点,当程序执行到断点时会停下来,然后可以逐行查看代码的执行路径、变量的值以及调用堆栈等信息。可以 使用 调试 器(如 Php Storm、NetBeans 或者 Xdebug 自带的命令行工具)来与 Xdebug 进行交互。 除了断点 调试 Xdebug 还提供了一些辅助功能。例如,它可以生成代码覆盖率报告,帮助我们了解代码的执行情况以及哪些部分没有被覆盖到。另外, Xdebug 还可以记录函数的调用时间和内存消耗,用于性能分析和优化。 为了更好地 使用 Xdebug ,我们可以在 PHP 配置文件中进行一些配置。我们可以设置远程 调试 (Remote Debugging),允许通过网络连接到远程服务器进行 调试 。我们还可以设置日志记录(Logging),将 调试 信息写入日志文件,以便以后分析。 总之, PHP Xdebug 是一个非常实用的工具,可以帮助开发人员更加高效地进行 PHP 程序的 调试 使用 Xdebug 可以快速定位和解决问题,并提高代码的质量和性能。 ### 回答3: PHP Xdebug 是一个可以提供 调试 、分析和优化 PHP 程序的强大工具。它为开发者提供了一系列的功能,帮助我们更方便地进行代码 调试 和性能分析。 首先, Xdebug 提供了强大的 调试 功能,可以让我们在 PHP 程序中设置断点,然后逐行 调试 代码。通过启用 Xdebug ,我们可以在代码中插入断点,以便在执行到断点时暂停程序并检查变量的值以及代码执行流程。这对于定位代码中的错误和 调试 复杂的程序非常有帮助。 此外, Xdebug 还可以生成详细的运行时日志,可以帮助我们追踪程序的执行流程和变量的变化。我们可以通过在配置文件中设置相应的参数,让 Xdebug 追踪和记录程序的每一步操作,以及输出和记录变量的值。这对于分析程序的执行顺序和检查变量的变化非常有用,可以帮助我们更好地了解程序的行为。 除了 调试 和日志功能, Xdebug 还提供了一系列的性能分析功能。它可以生成函数调用图,并统计函数的执行时间和调用次数,从而帮助我们发现程序中的性能瓶颈。通过分析 Xdebug 生成的报告,我们可以定位到执行时间较长的函数,并优化它们以提高程序的性能。 总结 来说, PHP Xdebug 是一个非常有用的工具,它可以帮助我们更好地 调试 、分析和优化 PHP 程序。通过 使用 Xdebug ,我们可以快速地定位代码中的错误,了解程序的执行流程和变量的变化,以及发现和优化程序的性能瓶颈。它是 PHP 开发者不可或缺的一款工具。