Xdebug能替代PHP的var_dump()函数来显示变量值。xdebug的版本包含对不同数据类型作数组元素/对象属性、最大深度和字符串长度以不同颜色标识。这里也有一些功能能很好地处理变量显示。
相关设置:
xdebug.cli_color
类型: integer, 默认值: 0, 始于 2.2版以上
设置为1时,xdebug会在CLI模式下且在tty终端输出时,会以有色显示var_dump跟踪输出的文字。window下, ANSICON工具需要安装。
设置为2时,则不管是否连接到tty终端或ANSICON是否被安装,xdebug会一直用颜色显示var_dump和调试跟踪信息。这种情形下,你可能在结束处看到转义码。
xdebug.overload_var_dump
类型: boolean, 默认值: 2(2.4版之前,该默认值为1), 始于 2.1版以上
xdebug默认情况下会过载var_dump()函数使用自己的改进版本来显示变量,如果html_errors在php.ini设置为1或2时。如果你真不要这样的设置,可以将此设置设为0,但你要确认它没智能地关闭了html_errors。
建议你使用2值。除了它能美观地格式化显示var_dump()输出,还会输出显示文件名和行号。另外xdebug.file_link_format也相应提供了(2.3版本新特性)。
xdebug.var_display_max_children
类型: integer, 默认值: 128
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制数组元素和对象属性的数量显示。
若不受限制,可以设为-1值。
该设置不受Remot_Debuggin远程调试的任何影响。
xdebug.var_display_max_data
类型: integer, 默认值: 512
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制字符串长度显示最大值。
若不受限制,可以设为-1值。
该设置不受Remot_Debugging远程调试的任何影响。
xdebug.var_display_max_depth
类型: integer, 默认值: 3
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制数组元素和对象属性的显示层级。
最大值为1023,你可以设为-1表示其最大值。
该设置不受Remot_Debugging远程调试的任何影响。
相关函数:
void var_dump( [mixed var [, ...]] )
显示变量的详细信息。
该函数已被xdebug覆盖,详见xdebug_var_dump()。
void xdebug_debug_zval( [string varname [, ...]] )
该函数用于显示一或多个变量的结构化信息,包含其类型、值和被引用信息。数组则循环递归探索元素值。该函数与PHP的debug_zval_dump()函数上实现不一样,它能解决变量本身需要传递给该函数的问题。Xdebug版本的函数更好地利用了变量名称在内部符号表中查找该变量而直接访问所有属性而无需处理变量传递给函数的问题。该函数返回的信息能更精确地表达zval信息。
Example:
<span style="color: #000000;">php </span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">array</span>(1, 2, 3<span style="color: #000000;">); </span><span style="color: #800080;">$b</span> =& <span style="color: #800080;">$a</span><span style="color: #000000;">; </span><span style="color: #800080;">$c</span> =& <span style="color: #800080;">$a</span>[2<span style="color: #000000;">]; xdebug_debug_zval(</span>'a'<span style="color: #000000;">); xdebug_debug_zval(</span>"a[2]"<span style="color: #000000;">); </span>?> <span style="color: #008000;">/*</span><span style="color: #008000;">* Returns: 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 </span><span style="color: #008000;">*/</span>
void xdebug_debug_zval_stdout( [string varname [, ...]] )
与xdebug_debug_zval()相同,但该函数不通过web API界面显示该信息,但会直接显示在stdout设备(例如可以运行在apache的单进程模式下并显示在终端)。
void xdebug_dump_superglobals()
该函数显示出超全局变量的元素值,要显示的值在php.ini的xdebug.dump.*中设置。例如php.ini中设置如下:
Example:
xdebug.dump.GET=*<span style="color: #000000;"> xdebug</span>.dump.SERVER=<span style="color: #000000;">REMOTE_ADDR Query </span><span style="color: #0000ff;">string</span>: ?<span style="color: #0000ff;">var</span>=fourty%20two&<span style="color: #0000ff;">array</span>[a]=a&<span style="color: #0000ff;">array</span>[9]=<span style="color: #000000;">b Returns</span>:<span style="color: #000000;"> Dump </span><span style="color: #800080;">$_SERVER</span> <span style="color: #800080;">$_SERVER</span>['REMOTE_ADDR'] = <span style="color: #0000ff;">string</span> '127.0.0.1' (length=9<span style="color: #000000;">) Dump </span><span style="color: #800080;">$_GET</span> <span style="color: #800080;">$_GET</span>['var'] = <span style="color: #0000ff;">string</span> 'fourty two' (length=10<span style="color: #000000;">) </span><span style="color: #800080;">$_GET</span>['array'] = <span style="color: #0000ff;">array</span> 'a' => <span style="color: #0000ff;">string</span> 'a' (length=1<span style="color: #000000;">) </span>9 => <span style="color: #0000ff;">string</span> 'b' (length=1<span style="color: #000000;">) </span>
void xdebug_var_dump( [mixed var [, ...]] )
该函数显示一或多个表达式的结构化详细信息,里面包含类型和值。数组则递归探索其元素值。
Example:
<span style="color: #000000;">php </span><span style="color: #008080;">ini_set</span>('xdebug.var_display_max_children', 3<span style="color: #000000;"> ); </span><span style="color: #800080;">$c</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> stdClass; </span><span style="color: #800080;">$c</span>->foo = 'bar'<span style="color: #000000;">; </span><span style="color: #800080;">$c</span>-><span style="color: #008080;">file</span> = <span style="color: #008080;">fopen</span>( '/etc/passwd', 'r'<span style="color: #000000;"> ); </span><span style="color: #008080;">var_dump</span><span style="color: #000000;">( </span><span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #0000ff;">array</span>(<span style="color: #0000ff;">TRUE</span>, 2, 3.14, 'foo'), 'object' => <span style="color: #800080;">$c</span><span style="color: #000000;"> ) ); </span>?> <span style="color: #008000;">/*</span><span style="color: #008000;">* Returns: 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) </span><span style="color: #008000;">*/</span>