PHP XDEBUG 扩展 | 文档

Xdebug 替换了 PHP 的 var_dump() 函数来显示变量。受限于数组元素或对象属性的数量, Xdebug 的版本针对数组元素不同的类型和空间包含不同的颜色,也包含最大的深度和字符串长度。这里也有一些其他的函数处理变量的显示。


对 var_dump() 设置的影响

这是一些控制 Xdebug 修改的 var_dump() 函数输出的设置:xdebug.var_display_max_childrenxdebug.var_display_max_dataxdebug.var_display_max_depth 。下面这个示例很好的展示了这三个设置的影响。可以在表格中看到区别。

脚本

<?php
class test {
    public 
$pub false;
    private 
$priv true;
    protected 
$prot 42;
}
$t = new test;
$t->pub $t;
$data = array(
    
'one' => 'a somewhat long string!',
    
'two' => array(
        
'two.one' => array(
            
'two.one.zero' => 210,
            
'two.one.one' => array(
                
'two.one.one.zero' => 3.141592564,
                
'two.one.one.one'  => 2.7,
            ),
        ),
    ),
    
'three' => $t,
    
'four' => range(05),
);
var_dump$data );
?>

结果

array
  'one' => string 'a somewhat long string!' (length=23)
  'two' => 
    array
      'two.one' => 
        array
          'two.one.zero' => int 210
          'two.one.one' => 
            array
              ...
  'three' => 
    object(test)[1]
      public 'pub' => 
        &object(test)[1]
      private 'priv' => boolean true
      protected 'prot' => int 42
  'four' => 
    array
      0 => int 0
      1 => int 1
      2 => int 2
      3 => int 3
      4 => int 4
      5 => int 5
array
  'one' => string 'a somewhat long string!' (length=23)
  'two' => 
    array
      'two.one' => 
        array
          'two.one.zero' => int 210
          'two.one.one' => 
            array
              ...
  more elements...
array
  'one' => string 'a somewhat long '... (length=23)
  'two' => 
    array
      'two.one' => 
        array
          'two.one.zero' => int 210
          'two.one.one' => 
            array
              ...
  'three' => 
    object(test)[1]
      public 'pub' => 
        &object(test)[1]
      private 'priv' => boolean true
      protected 'prot' => int 42
  'four' => 
    array
      0 => int 0
      1 => int 1
      2 => int 2
      3 => int 3
      4 => int 4
      5 => int 5
array
  'one' => string 'a somewhat long string!' (length=23)
  'two' => 
    array
      'two.one' => 
        array
          ...
  'three' => 
    object(test)[1]
      public 'pub' => 
        &object(test)[1]
      private 'priv' => boolean true
      protected 'prot' => int 42
  'four' => 
    array
      0 => int 0
      1 => int 1
      2 => int 2
      3 => int 3
      4 => int 4
      5 => int 5
array
  'one' => string 'a somewh'... (length=23)
  'two' => 
    array
      ...
  'three' => 
    object(test)[1]
      ...
  more elements...

相关设置


xdebug.cli_color
类型:整数,默认值: 0, 由 Xdebug > 2.2 引入

如果这个设置为 1,当在 CLI 模式并且输出是一个终端(tty)时,Xdebug 将会给 var_dumps 和堆栈跟踪输出附上颜色。在 Windows 系统下,需要安装 ANSICON 工具。

如果设置为 2,无论是否连上了终端和 ANSICON 是否安装,Xdebug 都将会给 var_dumps 和堆栈跟踪输出附上颜色。在这种情况下将不会看到转义的代码。

这篇文章了解更多信息。


xdebug.overload_var_dump
类型:布尔值,默认值: 2, 由 Xdebug > 2.1 引入

当 html_errors 在 php.ini 中设置为 1 或者 2 时,Xdebug 默认用自己改进的版本重载 var_dump() 来显示变量。如果你不希望这样,可以设置这个值为 0 ,但是首先要检查是否没有智能的关掉 html_errors。

你可以设置这个值为 2 。这将会在输出中添加文件名和行号,并且能很好地格式化 var_dump() 输出。这个 xdebug.file_link_format 设置也是推荐的。(在 Xdebug 2.3 中新增)

在 Xdebug 2.4 之前,这个设置的默认值是 1


xdebug.var_display_max_children
类型:整数,默认值: 128

当变量通过 xdebug_var_dump()xdebug.show_local_vars 或者函数跟踪显示时,控制数组子元素和对象属性显示的数量。

设置值为 -1 ,可以取消显示的任何限制。

这个设置不会对通过远程调试功能发送到客户端的子元素数量有任何影响。


xdebug.var_display_max_data
类型:整数,默认值: 512

当变量通过 xdebug_var_dump()xdebug.show_local_vars 或者函数跟踪显示时,控制显示的字符串的最大长度。

设置值为 -1 ,可以取消显示的任何限制。

这个设置不会对通过远程调试功能发送到客户端的子元素数量有任何影响。


xdebug.var_display_max_depth
类型:整数,默认值: 3

当变量通过 xdebug_var_dump()xdebug.show_local_vars 或者函数跟踪显示时,控制数组子元素和对象属性嵌套多少层。

你可以选择的最大值是 1023 。你也可以使用 -1 作为值来选择这个最大的值。

这个设置不会对通过远程调试功能发送到客户端的子元素数量有任何影响。


相关函数


void var_dump( [mixed var [, ...]] )
显示变量的详细信息

这个函数由 Xdebug 重载,看 xdebug_var_dump() 的描述。


void xdebug_debug_zval( [string varname [, ...]] )
显示一个变量的信息

这个函数显示一个或更多变量的结构化的信息,包含它的类型、值和引用信息。数组是递归性地探测值的。为了绕过变量本身实际上已经传递给了函数这个问题,这个函数的实现不同于 PHP 的 debug_zval_dump() 函数的实现。Xdebug 的版本更好是因为它使用这个变量名在内部符号表中查找这个变量,而且能直接访问所有的属性而不用实际地传递一个变量到函数来处理。结果是这个函数返回的信息比 PHP 自己的函数显示的容器信息更加准确。

从 Xdebug 2.3 开始支持除了简单变量名(例如下面的 "a[2]")之外的任何东西。

示例:

<?php
    $a 
= array(123);
    
$b =& $a;
    
$c =& $a[2];

    
xdebug_debug_zval('a');
    
xdebug_debug_zval("a[2]");
?>

返回:

a: (refcount=2, is_ref=1)=array (
	0 => (refcount=1, is_ref=0)=1, 
	1 => (refcount=1, is_ref=0)=2, 
	2 => (refcount=2, is_ref=1)=3)
a[2]: (refcount=2, is_ref=1)=3

void xdebug_debug_zval_stdout( [string varname [, ...]] )
返回一个变量标准输出的信息

这个函数显示一个或更多变量的结构化的信息,包含它的类型、值和引用信息。数组是递归性地探测值的。和 xdebug_debug_zval 不同的是这个信息不是通过网络服务器 API 层显示的,而是直接输出显示(所以当你用 Apache 单进程模式运行它,它在控制台结束)。

示例:

<?php
    $a 
= array(123);
    
$b =& $a;
    
$c =& $a[2];

    
xdebug_debug_zval_stdout('a');

返回:

a: (refcount=2, is_ref=1)=array (
	0 => (refcount=1, is_ref=0)=1, 
	1 => (refcount=1, is_ref=0)=2, 
	2 => (refcount=2, is_ref=1)=3)

void xdebug_dump_superglobals()
显示超级全局变量的信息

这个函数以 xdebug.dump.* 在 php.ini 中指定的设置转储超级全局变量元素的值。例如下面在 php.ini 中的设置:

示例:

xdebug.dump.GET=*
xdebug.dump.SERVER=REMOTE_ADDR

查询字符串:
?var=fourty%20two&array[a]=a&array[9]=b

返回:

Dump $_SERVER
$_SERVER['REMOTE_ADDR'] =
string '127.0.0.1' (length=9)
Dump $_GET
$_GET['var'] =
string 'fourty two' (length=10)
$_GET['array'] =
array
  'a' => string 'a' (length=1)
  9 => string 'b' (length=1)

void xdebug_var_dump( [mixed var [, ...]] )
显示一个变量细节方面的信息

这个函数显示一个或更多变量的结构化的信息,包含它的类型、值和引用信息。数组是递归性地探测值的。查看变量显示特征的介绍,可以看到 php.ini 的设置如何影响这个函数。

示例:

<?php
ini_set
('xdebug.var_display_max_children');
$c = new stdClass;
$c->foo 'bar';
$c->file fopen'/etc/passwd''r' );
var_dump(
    array(
        array(
TRUE23.14'foo'),
        
'object' => $c
    
)
);
?>  

返回:

array
  0 => 
    array
      0 => boolean true
      1 => int 2
      2 => float 3.14
      more elements...
  'object' => 
    object(stdClass)[1]
      public 'foo' => string 'bar' (length=3)
      public 'file' => resource(3, stream)