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 |
#
( ! ) 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 | 58132 | {メイン}( ) | ../stack.php:0 | |||||||||||
2 | 0.0004 | 62380 | foo( array(5) ) | ../stack.php:47 |
# |
時間 | 記憶 | 機能 | 場所 | |||||||||||
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 つの設定値があります。それぞれが異なる情報を提示します。次の表に、さまざまな設定値の情報を示します。
|
表示される引数情報 |
||||||||||||||
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()函数。