Xdebug ドキュメント (3) スタック トレース

WBOY
リリース: 2016-06-16 08:39:26
オリジナル
1070 人が閲覧しました

xdebug がアクティブ化されると、PHP が通知、警告、またはエラーを表示したいときはいつでも、xdebug はスタック トレース情報を表示します。表示されるスタック情報は、必要に応じて構成できます。

Xdebug によって表示されるスタック トレースはすべて、控えめな定量的な状態で情報を表示します。大量の情報処理とプレゼンテーションにより、スクリプトの実行が遅くなる可能性があるためです。さまざまな設定により、より詳細な情報を表示できます。

スタック トレース変数

Xdebug は通常、変数情報をスタック トレースに表示します。可変情報は、収集と表示の両方の状況で多くのリソースをもたらします。それにもかかわらず、多くの場合、これらの変数に関する情報の表示は役立つため、xdebug.clollect_params 設定が存在します。次のスクリプトは、異なる値を設定すると異なる情報を出力します:

スクリプト

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">function</span> foo( <span style="color: #800080;">$a</span><span style="color: #000000;"> ) {
    </span><span style="color: #0000ff;">for</span> (<span style="color: #800080;">$i</span> = 1; <span style="color: #800080;">$i</span> < <span style="color: #800080;">$a</span>['foo']; <span style="color: #800080;">$i</span>++<span style="color: #000000;">) {
        </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$i</span> == 500000<span style="color: #000000;">) xdebug_break();
    }
}

</span><span style="color: #008080;">set_time_limit</span>(1<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>->bar = 100<span style="color: #000000;">;
</span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(
    </span>42 => <span style="color: #0000ff;">false</span>, 'foo' => 912124,
    <span style="color: #800080;">$c</span>, <span style="color: #0000ff;">new</span> stdClass, <span style="color: #008080;">fopen</span>( '/etc/passwd', 'r'<span style="color: #000000;"> )
);
foo( </span><span style="color: #800080;">$a</span><span style="color: #000000;"> );
</span>?>
ログイン後にコピー

デフォルト値:

( ! ) Fatal   error: Maximum execution time of 1 second exceeded in   /home/httpd/html/test/xdebug/docs/stack.php on line 34

Call Stack

#

Time

Memory

Function

Location

1

0.0001

58564

{main}( )

../stack.php:0

2

0.0004

62764

foo( )

../stack.php:47

( ! ) 致命的なエラー: /home/httpd/html/test/xdebug/docs/stack.php 行 34

コールスタック

#

( ! ) Fatal error: Maximum execution time of 1   second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31

Call   Stack

#

Time

Memory

Function

Location

1

0.0001

58132

{main}(   )

../stack.php:0

2

0.0004

62380

foo( array(5) )

../stack.php:47

時間

記憶

機能

( ! ) Fatal error: Maximum execution time of 1   second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31

Call   Stack

#

Time

Memory

Function

Location

1

0.0001

58564

{main}(   )

../stack.php:0

2

0.0004

62812

foo( array(5) )

../stack.php:47

場所 1 0.0001 58564 {メイン}( ) ../stack.php:0 2 0.0004 62764 ふー( ) ../stack.php:47 テーブル> 1 つの値: ini_set('xdebug.collect_params', '1'); ( ! ) 致命的なエラー: /home/httpd/html/test/xdebug/docs/stack.php 行 31 コールスタック テーブル> 2 値: ini_set('xdebug.collect_params', '2');

#

時間 記憶 機能 場所
1 0.0001 58132 {メイン}( ) ../stack.php:0
2 0.0004 62380 foo( array(5) ) ../stack.php:47
( ! ) 致命的なエラー: /home/httpd/html/test/xdebug/docs/stack.php 行 31 コールスタック テーブル>

3值:

ini_set('xdebug.collect_params', '3');

#

時間 記憶 機能 場所
1 0.0001 58564 {メイン}( ) ../stack.php:0
2 0.0004 62812 foo( array(5) ) ../stack.php:47

( ! ) Fatal error: Maximum execution time of 1   second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31

Call   Stack

#

Time

Memory

Function

Location

1

0.0001

58564

{main}(   )

../stack.php:0

2

0.0004

62812

foo( array   (42 => FALSE, 'foo' => 912124, 43 => class stdClass { public $bar =   100 }, 44 => class stdClass { }, 45 => resource(2) of type   (stream)) )

../stack.php:47

<br>4值:
ログイン後にコピー
ini_set('xdebug.collect_params', '4');
ログイン後にコピー

( ! ) Fatal error: Maximum execution time of 1   second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31

Call   Stack

#

Time

Memory

Function

Location

1

0.0001

58132

{main}(   )

../stack.php:0

2

0.0004

62380

foo( $a   = array (42 => FALSE, 'foo' => 912124, 43 => class stdClass {   public $bar = 100 }, 44 => class stdClass { }, 45 => resource(2) of   type (stream)) )

../stack.php:47

関連設定:

xdebug.cli_color

タイプ: 整数、デフォルト値: 0、バージョン 2.2 以降

1 に設定すると、xdebug は CLI モードおよび tty ターミナルで出力するときに、var_dump トレースによって出力されたテキストをカラーで表示します。ウィンドウの下に、ANSICON ツールをインストールする必要があります。

2 に設定すると、xdebug は、tty 端末に接続されているかどうか、または ANSICON がインストールされているかどうかに関係なく、常に var_dump とデバッグ トレース情報をカラーで表示します。この場合、最後にエスケープ コードが表示されることがあります。

xdebug.collect_includes

タイプ: ブール、デフォルト値: 1

デフォルトでは、xdebug は include()、include_once()、require()、または require_once() メソッドを使用して参照されるファイル名をトレース ファイルに書き込みます。

xdebug.collect_params

タイプ: 整数、デフォルト値: 0

デフォルトが 0 の場合、この設定は、関数トレースまたはスタック トレースに関係なく、呼び出し関数のパラメーターを収集するように xdebug を制御します。

デフォルト値の 0 は、大規模なスクリプトが大量のメモリを消費することを考慮して、大規模なスクリプトに対しては実行されません。この設定を安全にオンにすることができますが、多数の関数呼び出しや引数として渡される大規模なデータ構造など、スクリプトの問題が発生することが予想されます。 Xdebug2 はメモリには保存せず、ディスクにのみ保存するため、メモリ使用量の増加という問題は発生しません。これには、十分なディスク使用量が必要です。

この設定には 4 つの設定値があります。それぞれが異なる情報を提示します。次の表に、さまざまな設定値の情報を示します。

テーブル>

 

xdebug.collect_vars

类型: boolean, 默认值: 0

该设置会让xdebug在一定范围内去收集变量信息。而这种分析工作相当慢因为xdebug会逆向解析PHP代码。该设置不会记录不同变量的值。如果你要利用xdebug_get_declared_vars()函数,那么就需要开启该设置了。

 

xdebug.dump.*

类型: string, 默认值: Empty

* 号可以用 COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION任意一个来代替. 这七个设置值控制在错误发生时的超全局变量的数据。

在php.ini中每个设置值都由逗号分隔形成变量列表,或者*号代表全部。要确定你在设置里没有空格。

为了在错误发生时收到REMOTE_ADDR 和 REQUEST_METHOD 信息和所有GET参数,可以设置:

xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD

xdebug.dump.GET = *

 

xdebug.dump_globals

类型: boolean, 默认: 1

控制超全局变量值是否显示,无论在xdebug.dump.*设置了什么。

 

xdebug.dump_once

类型: boolean, 默认值: 1

控制是否在所有错误情况下显示超全局变量值(设为0值)或只在第一次出现(设为1值)。

 

xdebug.dump_undefined

类型: boolean, 默认值: 0

如果需要显示超全局变量中未定义值则该项设为1,否则保留0默认项。

 

xdebug.manual_url

类型: string, 默认值: http://www.php.net, 始于 Xdebug 2.2.1以下版本

指定函数追踪和错误信息的链接说明来源。建议设定使用最近的镜像链接。

 

xdebug.show_exception_trace

类型: integer, 默认值: 0

当设置为1时,Xdebug会在异常出现时甚至是该异常被捕捉也会显示其堆栈跟踪信息。

 

xdebug.show_local_vars

类型: integer, 默认值: 0

当设置为非0值时,Xdebug在错误情况下产生的堆栈跟踪会显示所有变量信息在最顶端范围。这有可能会产生大量信息,所以默认情况下关闭。

 

xdebug.show_mem_delta

Type: integer, Default value: 0

当该设置不为0时,xdebug的人类可读性追踪记录文件会显示函数调用时内存使用量。如果xdebug配值为产生机器可读性追踪文件,那么它们经常显示这些信息。、

 

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远程调试的任何影响。

 

相关函数:

array xdebug_get_declared_vars()

返回一个数组,数组元素都是当前范围内已定义的变量名。要使函数生效则xdebug.collect_vars必须开启。

Example:

<?<span style="color: #000000;">php
    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> strings {
        </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> fix_strings(<span style="color: #800080;">$a</span>, <span style="color: #800080;">$b</span><span style="color: #000000;">) {
            </span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$b</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$item</span><span style="color: #000000;">) {
            }
            </span><span style="color: #008080;">var_dump</span><span style="color: #000000;">(xdebug_get_declared_vars());
        }
    }
    strings</span>::fix_strings(<span style="color: #0000ff;">array</span>(1,2,3), <span style="color: #0000ff;">array</span>(4,5,6<span style="color: #000000;">));
</span>?>
<span style="color: #008000;">/*</span><span style="color: #008000;">*
Returns:
array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'item' (length=4)
 
</span><span style="color: #008000;">*/</span>
ログイン後にコピー

 

PHP5.1之前版本,变量名“a”不会在返回的数组中,因为在xdebug_get_declared_vars()函数执行时,该变量没被使用。

 

array xdebug_get_function_stack()

返回一数组,内含在函数这个点显示出来的类似于堆栈跟踪的信息。

Example:

<?<span style="color: #000000;">php
    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> strings {
        </span><span style="color: #0000ff;">function</span> fix_string(<span style="color: #800080;">$a</span><span style="color: #000000;">)
        {
            </span><span style="color: #008080;">var_dump</span><span style="color: #000000;">(xdebug_get_function_stack());
        }

        </span><span style="color: #0000ff;">function</span> fix_strings(<span style="color: #800080;">$b</span><span style="color: #000000;">) {
            </span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$b</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$item</span><span style="color: #000000;">) {
                </span><span style="color: #800080;">$this</span>->fix_string(<span style="color: #800080;">$item</span><span style="color: #000000;">);
            }
        }
    }

    </span><span style="color: #800080;">$s</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> strings();
    </span><span style="color: #800080;">$ret</span> = <span style="color: #800080;">$s</span>->fix_strings(<span style="color: #0000ff;">array</span>('Derick'<span style="color: #000000;">));
</span>?>
<span style="color: #008000;">/*</span><span style="color: #008000;">*
Returns:

array

  0 => 

    array

      'function' => string '{main}' (length=6)

      'file' => string '/var/www/xdebug_get_function_stack.php' (length=63)

      'line' => int 0

      'params' => 

        array

          empty

  1 => 

    array

      'function' => string 'fix_strings' (length=11)

      'class' => string 'strings' (length=7)

      'file' => string '/var/www/xdebug_get_function_stack.php' (length=63)

      'line' => int 18

      'params' => 

        array

          'b' => string 'array (0 => 'Derick')' (length=21)

  2 => 

    array

      'function' => string 'fix_string' (length=10)

      'class' => string 'strings' (length=7)

      'file' => string '/var/www/xdebug_get_function_stack.php' (length=63)

      'line' => int 12

      'params' => 

        array

          'a' => string ''Derick'' (length=8)

 </span><span style="color: #008000;">*/</span>
ログイン後にコピー

 

 

integer xdebug_get_stack_depth()

返回堆栈深度层级。脚本主体为0级而各种引用或调用函数则添加一个堆栈深度层级。

 

none xdebug_print_function_stack( [ string message [, int options ] ] )

用类似在错误情况下显示当前函数追踪信息。

"message" 参数允许你可以自定义显示信息。 (始于Xdebug 2.1版本).

Example:

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">function</span> foo( <span style="color: #800080;">$far</span>, <span style="color: #800080;">$out</span><span style="color: #000000;"> )
{
    xdebug_print_function_stack( </span>'Your own message'<span style="color: #000000;"> );
}
foo( </span>42, 3141592654<span style="color: #000000;"> );
</span>?>
ログイン後にコピー

 

Returns:

Value

Argument   Information Shown

0

无.

1

展示变量元素的值类型和值。

2

展示变量元素的值类型和值,并附带滑鼠提示显示完整信息。(CLI模式下不存在滑鼠提示)

3

完整变量内容(内容受限于以下设置: xdebug.var_display_max_children,xdebug.var_display_max_data and xdebug.var_display_max_depth.)

4

完整变量内容和名称。

5

PHP 序列化变量内容,不含名称。(2.3版本新特性)

表示される引数情報

0

なし。

1

変数要素の値の型と値を表示します。

2

変数要素の値のタイプと値を表示し、マウス プロンプトに完全な情報が表示されます。 (マウスプロンプトは CLI モードには存在しません)

3

変数の完全な内容 (内容は次の設定によって制限されます: xdebug.var_display_max_children、xdebug.var_display_max_data、および xdebug.var_display_max_ Depth。)

4

変数の完全な内容と名前。

5

PHP は変数の内容を名前なしでシリアル化します。 (2.3バージョンの新機能)

( ! ) Xdebug: Your own message in   /home/httpd/html/test/xdebug/print_function_stack.php on line 5

Call Stack

#

Time

Memory

Function

Location

1

0.0006

653896

{main}( )

../print_function_stack.php:0

2

0.0007

654616

foo( 42, 3141592654 )

../print_function_stack.php:7

3

0.0007

654736

xdebug_print_function_stack ( 'Your own message' )

../print_function_stack.php:5

 
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー

掩码参数"options" 允许你配置一些额外的参数选项。支持的选项有:

<strong>XDEBUG_STACK_NO_DESC</strong>

如果设置此项,则显示的追踪信息不包含头部。这对于你想从自定义的错误处理器中显示自己的错误追踪信息就很有用。除此之外,你可以在需要显示的位置调用xdebug_print_function_statck()函数。(始于xdebug2.3)

void xdebug_start_function_monitor( array $list_of_functions_to_monitor )

开始函数监控。

始于版本2.4

该函数在将一系列的函数名作为参数传递时就开始监视这些函数。函数监视器会找出这些你提供的函数所在的代码。这样可以用于追踪那些旧函数或废弃的函数。

Example:

<?<span style="color: #000000;">php
xdebug_start_function_monitor( [ </span>'strrev', 'array_push'<span style="color: #000000;"> ] );
</span>?>
ログイン後にコピー

 

你也可以添加类方法或静态方法到数组中进行监视。例如,为了捕获静态调用DramModel::canSee 和 动态调用 Whisky->drink,你可以开始以下监视:

Example:

<?<span style="color: #000000;">php
xdebug_start_function_monitor( [ </span>'DramModel::canSee', 'Whisky->drink'<span style="color: #000000;">] );
</span>?>
ログイン後にコピー

 

被定义的函数要区分大小写,若动态调用到静态方法将不会被捕获。

 

void xdebug_stop_function_monitor()

停止函数监视

始于版本2.4

该函数停止对函数监视。需要获取被监视函数列表,可以使用xdebug_get_monitored_functions()函数。

 

 

 

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート