XDebugが有効になっているとComposer
が遅くなる。
PHP 7.4.6がインストール済と仮定する。
$ 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
以下環境変数を渡すことによりXdebugを使ったデバッグを開始
$ 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.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関数はその関数がコールされるまでのスタックトレースを表示します。
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
関数 | 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;