IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Xdebug使用指南

Think IN CODE 2009-11-03 09:24:44 累计浏览 4,395 次
本机暂存

想想我从前没用Xdebug时候,真不敢想象那种日子啊,所以今天打算把这个东西介绍给大家,虽然不是什么新东西,毕竟很多同学还木有用过,所以我还是费点笔墨写写吧。

我在这里主要介绍如下几点:

  • Xdebug是什么?
  • Xdebug的Stack trace功能
  • 用Xdebug来查看php的变量
  • 用Xdebug进行程序概要分析
  • Xdebug其他小功能

一、Xdebug是什么?

xdebug作为php的一个扩展出现,通过stack trace等功能来帮助我们调试php程序,帮助我们写一个bug free而且高效的php程序。项目主页是http://www.xdebug.org/,您可以在那看到介绍和一些文档,关于如何安装啥的我就不多说了。

二、Xdebug的Stack trace功能
比如下面这段抛出异常的程序:

在没有xdebug的情况下显示是这样的:
exception
而用了xdebug之后,会输出直观的界面,如下图所示:
xdebug stack
现在只是将这个stack输出了,您还可以通过配置xdebug来输出更多信息以帮助我们debug,比如配置如下所示的配置:

ini_set('xdebug.collect_vars', 'on');
ini_set('xdebug.show_local_vars', 'on');

这样就可以将本地变量打印出来,当然你可以配置更多来输出更多的信息!关于这些配置的具体介绍请看http://xdebug.com/docs/stack_trace,这里面有详细的介绍。
三、用Xdebug来查看php的变量
比如如下数组:

$foo = array(
    '0' => array('b', 'l', 'a', 'n', 'k'),
    '1' => array(
        array(
            'sex' => 'male'
        )
    ),
    '2' => array(
        array(
            array(
                'name' => 'blankyao',
            )
        )
    )
);

var_dump($foo);

没使用php的时候只是以简单的形式将数组输出,而使用PHP之后是这样的:
xdebug var_dump
如您所见,可以看到每一个变量的类型长度等信息。
看了后您可能会好奇为什么最后会有几个省略号,是这样的,您可以通过配置来控制要输出的维数,不光可以配置维数,还可以配置显示每一维显示数组的个数、元素内容的长度,这几个配置分别是

xdebug.var_display_max_depth
xdebug.var_display_max_data
xdebug.var_display_max_children

更多信息请看文档http://www.xdebug.org/docs/display

另外,xdebug提供的xdebug_debug_zval函数可以输出变量的zval结构,php自带的debug_zval_dump函数也可以,但是输出的结果没有xdebug_debug_zval直观。
四、用Xdebug进行程序概要分析
通过对程序进行概要分析,您可以看到整个程序的运行过程、变量传递、函数调用的过程、代码执行的时间以及占用的内存等内部的机制,通过使用xdebug,您可以通过配置一下很轻松的完成这些!
对程序进行profiling得到的结果可以用图形化的工具直观的显示出来,在linux下有CacheGrind,windows下有wincachegrind(已经好久没更新,大家可以去试下老高修改的一个版本,http://www.paulgao.com.cn/index.php?itemid=134&catid=1)。
关于具体的配置和使用,大家可以看下官方文档 Function TracesProfiling PHP Scripts

五、其他小功能

  • 程序执行分析:通过调用xdebug_get_code_coverage()就可以看到哪行代码被执行了
  • xdebug_call_class()、xdebug_call_file()、xdebug_call_function()、xdebug_call_line()分别可以返回当前正在执行的类、文件、方法/函数、行数
  • xdebug_get_headers()可以返回所有的通过header()函数发出的header信息
  • xdebug_time_index()可以返回当前程序执行的时间

以上就是我从前用到的过的一些功能,强大的xdebug还有一些其他强大的功能,大家可以去xdebug官方网站去看一下!

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,268)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  4. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  5. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
  6. 如何查找消耗资源较大的SQL (累计阅读 15,210)
  7. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  8. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
  9. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  10. Redis消息队列的若干实现方式 (累计阅读 12,088)