lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

Xdebugのvar_display_max_XXXが設定変更されない

概要

Xdebugを使用したPHPデバッグをする際にvar_dumpの内容をすべて表示するために
var_display_max_XXXの設定をする必要がありますがVSCode + Xdebugでのリモートデバッグだと
設定が反映されず詰まったのでメモです。

Dockerを使用したPHP-FPM + nginxの環境でVSCode + Xdebugみたいな構成です。
結果的にはリモートデバッグ専用の設定があった感じです。

目次

参考サイト様

環境

$ docker -v
Docker version 18.09.2, build 6247962
$ docker-compose -v
docker-compose version 1.23.2, build 1110ad01

PHP-FPM(7系)やNginxのバージョンはlatestです。

下記リポジトリを例に進めます。

github.com

事象

前述の環境(構成)でxdebug.iniに下記項目を設定したが反映されませんでした。

  • xdebug.var_display_max_children
  • xdebug.var_display_max_data
  • xdebug.var_display_max_depth

上記設定を行った背景としてはVSCodeデバッグした際にデフォルト設定値を超える配列の要素数が表示されずに頭抱えてた感じです。

原因

前述の3設定についてはリモートデバッグには反映されないため。

該当の設定値については公式ドキュメントに下記の記載がありました。

This setting does not have any influence on the number of children that is send to the client through the Remote Debugging feature.
Xdebug: Documentation

対策

VSCodelaunch.json側で前述の設定値と対になる設定を行います。

launch.jsonの編集

設定値についてはPHP Debugのドキュメントに記載がありました。

launch.jsonxdebugSettingsセクションを追加します。 追加項目は下記の2つです。

  • max_children
  • max_data

上記2項目の設定については下記のドキュメントに記載があります。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "stopOnEntry": true,
      "pathMappings": {
          "/var/phpapp": "${workspaceRoot}/src"
      },
      //下記を追加
      "xdebugSettings": {
        "max_children": 999,
        "max_data": 999
      }
    },
    //省略
  ]
}

また、設定値についてはphp.iniで設定する際には-1がセオリーっぽいんですが
-1を設定するとVSCodeでうまくデバッグが開始できませんでした。
なので999を設定しています。

雑感

配列の要素が全て表示されないからマジでDBから取得下データがコードのどこかで消失してると思って頭抱えてた。