PHP XDEBUG 扩展 | 文档

Xdebug 的基本功能包括错误状态时的堆栈跟踪展示、最大嵌套级别的保护和时间跟踪。



相关设置


xdebug.default_enable
类型:布尔值,默认值: 1
如果这个设置设置为 1,错误事件发生时堆栈跟踪将会默认显示。可以在代码 xdebug_disable() 中关闭显示错误跟踪。这是 Xdebug 基础函数中的一个函数,建议将此设置设为 1.

xdebug.force_display_errors
类型:整数,默认值: 0, 由 Xdebug 2.3 引入

如果这个设置设置为 1,无论 PHP 的 display_errors 为多少,错误都将会显示。


xdebug.force_error_reporting
类型:整数,默认值: 0, 由 Xdebug 2.3 引入

这个设置是一个位掩码,像 error_reporting。这个位掩码将会与 error_reporting 所表示的位掩码进行逻辑与运算来决定应该显示哪种错误。这个设置只能在 php.ini 中完成,无论一个应用中 ini_set() 的值是多少,它允许你强制显示某些错误。


xdebug.halt_level
类型:整数,默认值: 0, 由 Xdebug 2.3 引入

这个设置允许你配置一个位掩码来决定是否将通知和(或者)警告转换为错误,以及将哪些通知和(或者)警告转换为错误。你可以配置 PHP 生成的通知和警告和你自己生成的通知和警告(意思是 trigger_error())。例如,转换 strlen()(没有参数)的警告为错误,你可以:

ini_set('xdebug.halt_level', E_WARNING);
strlen();
echo "Hi!\n";

这结果将会是显示错误信息并且终止脚本。echo "Hi!\n"; 将不会执行。

这个设置是位掩码,针对所有应用转换所有通知和警告为错误,可以在 php.ini 中设置这个:

xdebug.halt_level=E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE

这个位掩码只支持上面提到的 4 种错误级别。


xdebug.max_nesting_level
类型:整数,默认值: 256

针对无穷递归的控制保护机制。在脚本中止之前,这个函数嵌套的最大层级的设置值是被允许的。

Xdebug 2.6之前,如果超出这会创建一个致命的异常。从 Xdebug 2.6 开始及更高版本 ,而是抛出一个 "Error" 异常。

在 Xdebug 2.3 之前,默认值是 100


xdebug.max_stack_frames
类型: 整型,默认值: -1,由 Xdebug >= 2.3 引入

控制堆栈跟踪中显示的堆栈帧数量,基于 PHP 错误堆栈跟踪期间的命令行,以及浏览器中的 HTML 跟踪。


xdebug.scream
类型:布尔值,默认值: 0, 由 Xdebug >= 2.1 引入
如果这个设置为1,Xdebug 将会禁用 @(屏蔽错误、抑制报错)操作符,所以通知、警告和错误将不在隐藏。

相关函数


string xdebug_call_class( [int $depth = 2] )
返回调用的类,如果堆栈帧不存在返回 NULL,如果堆栈帧没有类信息则返回 FALSE

这个函数返回定义当前方法的类的名称,如果没有与此调用关联的类则返回 FALSE

示例:

<?php
class Strings
{
    static function 
fix_string($a)
    {
        echo
            
xdebug_call_class().
            
"::".
            
xdebug_call_function().
            
" is called at ".
            
xdebug_call_file().
            
":".
            
xdebug_call_line();
    }
}

$ret Strings::fix_string'Derick' );
?>

返回:

Called @ /home/httpd/html/test/xdebug_caller.php:17 from ::{main}

为了从更早的堆栈帧中获得信息,请使用可选的 $depth 参数。值为 1 则返回执行 xdebug_call_class() 的方法的调用信息:

示例:

<?php
class Strings
{
    static function 
fix_string$a )
    {
        echo
            
xdebug_call_class).
            
"::".
            
xdebug_call_function).
            
" is called at ".
            
xdebug_call_file).
            
":".
            
xdebug_call_line);
    }
}

$ret Strings::fix_string'Derick' );
?>

返回:

Strings::fix_string is called at /home/httpd/html/test/xdebug_caller:17

值为 2 (默认)则返回当前方法的“祖父母”的调用信息:

示例:

<?php
class Strings
{
    static function 
fix_string$a )
    {
        echo
            
xdebug_call_class).
            
"::".
            
xdebug_call_function).
            
" is called at ".
            
xdebug_call_file).
            
":".
            
xdebug_call_line);
    }

    static function 
fix_strings( array $a )
    {
        foreach ( 
$a as $element )
        {
            
self::fix_string$a );
        }
    }
}

$ret Strings::fix_strings( [ 'Derick' ] );
?>

返回:

Strings::fix_strings is called at /home/httpd/html/test/xdebug_caller:25

值为 0 则返回调用对应 xdebug_call_* 方法的调用信息:

示例:

<?php
class Strings
{
    static function 
fix_string$a )
    {
        echo
            
xdebug_call_class).
            
"::".
            
xdebug_call_function).
            
" is called at ".
            
xdebug_call_file).
            
":".
            
xdebug_call_line);
    }

    static function 
fix_strings( array $a )
    {
        foreach ( 
$a as $element )
        {
            
self::fix_string$a );
        }
    }
}

$ret Strings::fix_strings( [ 'Derick' ] );
?>

返回:

::xdebug_call_function is called at /home/httpd/html/test/xdebug_caller:13

string xdebug_call_file( [int $depth = 2] )
返回调用文件,如果堆栈帧不存在则返回 NULL

这个函数返回执行当前函数或者方法的文件名。

为了获得更早的堆栈帧的信息,请使用可选的 $depth 参数。

有关示例和更多的信息,查看 xdebug_call_class()


string xdebug_call_function( [int $depth = 2] )
返回调用的函数或者方法,如果堆栈帧不存在则返回 NULL,如果堆栈帧没有函数或者方法信息则返回 FALSE

这个函数返回当前函数或者方法的名称。

为了从更早的堆栈帧中获得信息,请使用可选的 $depth 参数。

有关示例和更多的信息,查看 xdebug_call_class()


int xdebug_call_line( [int $depth = 2] )
返回调用的行号,如果堆栈帧不存在则返回 NULL

这个函数返回当前函数或者方法被调用的行号。

为了从更早的堆栈帧中获得信息,请使用可选的 $depth 参数。

有关示例和更多的信息,查看 xdebug_call_class()


void xdebug_disable()
禁止堆栈跟踪

错误状态时禁止显示堆栈跟踪。


void xdebug_enable()
开启堆栈跟踪

错误状态时开启显示堆栈跟踪。


string xdebug_get_collected_errors( [int clean] )
返回收集的所有错误信息
在 2.1 版本引入

这个函数从缓存集合区返回所有的错误,缓存区包含当用 xdebug_start_error_collection() 把错误集合开启时存储在这里的所有错误信息。

默认设置这个函数不会清除错误缓存集合区。如果传递 "true" 作为这个函数的参数,那么缓存区也将会被清除。

这个函数会返回一个字符串,包含用 "Xdebug 表格"格式化的所有收集的错误。


array xdebug_get_headers()
通过调用 PHP header() 函数,返回设置的所有头部信息
在 2.1 版本引入

以数组的形式返回由 PHP header() 函数设置或者由 PHP 内部设置的(比如通过 setcookie())所有的头部。

示例:

<?php
header
"X-Test""Testing" );
setcookie"TestCookie""test-value" );
var_dumpxdebug_get_headers() );
?>

返回:

array(2) {
  [0]=>
  string(6) "X-Test"
  [1]=>
  string(33) "Set-Cookie: TestCookie=test-value"
}

bool xdebug_is_enabled()
返回堆栈跟踪是否开启

在发生错误的情况下,返回堆栈跟踪是否会显示。


int xdebug_memory_usage()
返回当前的内存使用

返回当前脚本使用的内存数量。在 PHP 5.2.1 之前,只工作在 PHP 使用 --enable-memory-limit 编译之后。在 PHP 5.2.1 和之后的版本中这个函数总是有效的。


int xdebug_peak_memory_usage()
返回内存使用的峰值

返回截止到目前脚本使用内存的最大数量。在 PHP 5.2.1 之前,只工作在 PHP 使用 --enable-memory-limit 编译之后。在 PHP 5.2.1 和之后的版本中这个函数总是有效的。


void xdebug_start_error_collection()
开启记录所有的通知、警告和错误,并且阻止他们的显示
在 2.1 版本引入

当这个函数执行时, Xdebug 将会让 PHP 不显示任何通知、警告和错误。而是根据 Xdebug 正常标准的错误格式化规则来格式化这些信息并储存在缓存区中。直到调用 xdebug_stop_error_collection() 才会停止。

这个缓存区的内容可以通过调用 xdebug_get_collected_errors 来获取并接着显示出来。如果你想阻止 Xdebug 强力的错误报告功能破坏你的布局,这个函数非常有用。


void xdebug_stop_error_collection()
停止记录由 xdebug_start_error_collection() 开启的所有通知、警告和错误。
在 2.1 版本引入

当函数执行时,由 xdebug_start_error_collection() 开启的错误收集将会停止。这些错误储存在缓存集合区不会被删除,仍然可以通过 xdebug_get_collected_errors 获取到。


float xdebug_time_index()
返回当前的时间索引

返回自脚本开始时的时间索引,以秒为单位。

示例:

<?php
echo xdebug_time_index(), "\n";
for (
$i 0$i 250000$i++)
{
    
// do nothing
}
echo 
xdebug_time_index(), "\n";
?>

返回:

0.00038003921508789
0.76580691337585