Xdebug中文文檔-變量打印特性

文檔內容來自xdebug.org/docs,翻譯時xdebug版本爲2.6。我在官方文檔基礎上針對中文排版和教程內容的編排作了一些優化,但願中文文檔看起來更容易理解。php

英文原始文檔地址: https://xdebug.org/docs/
中文文檔github地址: https://github.com/Anoxia/xde...

Xdebug替換了PHP的var_dump()函數來顯示變量。Xdebug的版本包含不一樣類型的不一樣顏色,並限制數組元素/對象屬性的數量,最大深度和字符串長度。還有一些其餘功能處理變量顯示。html

設置對var_dump的影響

有許多設置能夠控制Xdebug修改的var_dump()函數的輸出 :xdebug.var_display_max_children,xdebug.var_display_max_data和xdebug.var_display_max_depth。這三個設置的效果最好用一個例子來展現。下面的腳本運行四次,每次都有不一樣的設置。您可使用這些標籤來查看差別。git

代碼:github

<?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(0, 5),
);
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

輸出(xdebug.var_display_max_children = 2):服務器

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...

輸出(xdebug.var_display_max_data = 16):函數

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

輸出(xdebug.var_display_max_depth = 2):工具

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

輸出(xdebug.var_display_max_children = 3,xdebug.var_display_max_data = 8,xdebug.var_display_max_depth = 1):優化

array
  'one' => string 'a somewh'... (length=23)
  'two' => 
    array
      ...
  'three' => 
    object(test)[1]
      ...
  more elements...

相關設置

xdebug.cli_color

該功能僅適用於 Xdebug> = 2.2

類型:整數,默認值:0,翻譯

若是此設置爲1,則在CLI模式下以及輸出爲tty時,var_dumps和堆棧跟蹤Xdebug將着色輸出。在Windows上, 須要安裝ANSICON工具。

若是設置爲2,那麼不管是否鏈接到tty或是否安裝ANSICON,Xdebug將始終爲var_dumps和堆棧跟蹤着色。在這種狀況下,您最終可能會看到轉義碼。

看到這篇文章的一些更多的信息。

xdebug.overload_var_dump

該功能僅適用於 Xdebug> = 2.1

php.ini中html_errors設置爲1或2時,Xdebug會默認更改var_dump輸出。若是您不但願如此,您能夠將其值設置爲0,可是首先檢查是否智能關閉html_errors。

該值設置爲2時,除了很好的格式化var_dump()輸出外,它還會將文件名和行號添加到輸出中。

在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

經過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()函數不一樣,是用來解決debug_zval_dump()函數存在的問題,由於變量自己實際上被傳遞給函數。Xdebug的版本更好,由於它使用變量名查找內部符號表中的變量,並直接訪問全部屬性,而沒必要處理實際將變量傳遞給函數。結果是這個函數返回的信息比PHP本身的顯示zval信息的函數要準確得多。

自Xdebug 2.3以來, 支持除簡單變量名稱(以下面的「a [2]」)以外的任何其餘內容。

例:

<?php
    $a = array(1, 2, 3);
    $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 [, ...]] )

將有關變量的信息返回到stdout。

此功能顯示有關一個或多個變量的結構化信息,其中包括其類型,值和引用計數信息。數組經過值遞歸地進行探索。與xdebug_debug_zval()的不一樣之處在於信息不是經過Web服務器API層顯示的,而是直接顯示在標準輸出上(因此當你在單進程模式下運行Apache時,它將在控制檯上輸出)。

例:

<?php
    $a = array(1, 2, 3);
    $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

Query string:
?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', 3 );
$c = new stdClass;
$c->foo = 'bar';
$c->file = fopen( '/etc/passwd', 'r' );
var_dump(
    array(
        array(TRUE, 2, 3.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)
相關文章
相關標籤/搜索