#
ドキュメント

Document

自分のための備忘録です。

XDebugインストール

XDebugが有効になっているとComposerが遅くなる。

PHP 7.4.6がインストール済と仮定する。

  • PECLでインスール
  • Homebrewでもインスールできるとマニュアルにはあるが失敗した

現状を確認

$ php -v
PHP 7.4.6 (cli) (built: May 29 2020 01:44:57) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

XDebugがインストールされている場合は、上記にその旨の表示がある。 今回はないのでインストールする。

インストール

$ pecl install xdebug
.....
.....
Build process completed successfully
Installing '/usr/local/Cellar/php/7.4.6_1/pecl/20190902/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.9.8
Extension xdebug enabled in php.ini

php.iniにzend_extension="xdebug.so"が追記されているかを確認する。 php.iniの場所は以下で確認。

$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini
php -v
PHP 7.4.6 (cli) (built: May 29 2020 01:44:57) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
+    with Xdebug v2.9.8, Copyright (c) 2002-2020, by Derick Rethans
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

CLIスクリプトをデバッグ

PHP CLI スクリプトをデバッグする

以下環境変数を渡すことによりXdebugを使ったデバッグを開始

  1. PhpStorm リッスンマークを押下してリッスン
  2. 環境変数を設定
  3. スクリプトを実行
$ export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=127.0.0.1 remote_connect_back=0"

環境変数の削除

$ unset XDEBUG_CONFIG

環境変数の確認

$ env
// または
$ export -p

XDebug

Xdebug: Documentation

設定項目 意味 デフォルト
xdebug.default_enable エラーイベントでスタックトレースを表示します。 1
xdebug.overload_var_dump var_dumpをXDebugの提供版へ変更します。 1
xdebug.var_display_max_children 配列、オブジェクトのプロパティの表示個数の上限を設定。-1は上限を設けない。 128
xdebug.var_display_max_data 文字列の表示上限。-1上限を設けない。 512
xdebug.var_display_max_depth オプジェクトや配列のプロパティが入れ子になっているときに、値を表示する上限を指定します。設定可能な最大値は1023です。-1上限を設けない。 3
xdebug.scream エラー抑制演算子@を無効化できます。 デフォルトは0です。

xdebug_print_function_stack

xdebug_print_function_stack関数はその関数がコールされるまでのスタックトレースを表示します。

function x() {
    $x = 'x';
    y($x);
}
function y($v) {
    $y = 'y' . $v;
    z($y);
}
function z($v) {
    echo $v;
    xdebug_print_function_stack('Trace');
}
x();
yx
( ! ) Xdebug: Trace in /Volumes/production/assets/tutorial/php/debug/xdebug.php on line 30
Call Stack
#	Time	Memory	Function	Location
1	0.0004	242976	{main}( )	.../xdebug.php:0
2	0.0004	243008	x( )	.../xdebug.php:33
3	0.0004	243088	y( )	.../xdebug.php:22
4	0.0004	243216	z( )	.../xdebug.php:26
5	0.0004	243336	xdebug_print_function_stack ( )	.../xdebug.php:30

その他のデバッグ

var_dump/print_r

関数 TRUE, FALSE, NULLの扱い
print_r TRUEは1へFALSE, NULLは表示されません。
var_dump TRUE, FALSE, NULLを表示します。
$a = [true, false, null];
print_r($a);
Array
(
    [0] => 1
    [1] => 
    [2] => 
)
$a = [true, false, null];
print_r($a);
array(3) {
  [0]=>
  bool(true)
  [1]=>
  bool(false)
  [2]=>
  NULL
}
関数 内容
debug_backtrace バックトレース(速度の問題などでXDebugが利用できないときに便利です)。
[void debug_print_backtrace ([ int $options = 0 [, int $limit = 0 ]] )]() debug_print_backtrace() は PHP バックトレースを 表示します。関数のコール、include / require されているファイル、 そして eval() された内容などが表示されます。
$dbg = debug_backtrace();
echo $dbg[0]['function'] . '<br>';  // 対象メソッド
echo $dbg[0]['class'] . '<br>';     // 対象クラス
echo $dbg[1]['function'] . '<br>';
echo $dbg[1]['class'] . '<br>';
echo $dbg[2]['function'] . '<br>';
echo $dbg[2]['class'] . '<br>';
exit;