VS Code PHP - xDebug Parameter werden nicht übernommen

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.624
Ich bin am verzweifeln. Nachdem ich mit Stack Overflow nicht weiterkomme, probiere ich hier mal mein Glück.
Und zwar benutze ich VS Studio Code, xDebug 3.1.1 auf einem Linux Server um ein PHP Script zu debuggen. Als Extension in VS Code kommt PHP Debug zum Einsatz. https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug

Soweit so gut. Wenn ich auf Run + Debug klicke, wird das Script ausgeführt und passt alles soweit. Alternativ kann ich auf "Listen for Xdebug" klicken, dann im Terminal nebenbei php meinScript.php eingeben und es funktioniert.

Aber ich habe bestimmte Parameter die ich an xDebug übergeben muss, da ansonsten die Objekte nicht richtig im Debugger dargestellt werden. Das habe ich schon mit Hilfe von Stackoverflow herausgefunden. Also die Run Config angepasst

JSON:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "xdebugSettings": {
                "max_children": 1000,
                "max_data": 10000,
                "max_depth": 10,
                "show_hidden": 1
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 0,
            "runtimeArgs": [
                "-d xdebug.start_with_request=yes",
                "-d xdebug.var_display_max_depth=10",
                "-d xdebug.var_display_max_children=1000",
                "-d xdebug.var_display_max_data=10000",
            ],
            "env": {
                "XDEBUG_MODE": "debug,develop",
                "XDEBUG_CONFIG": "client_port=${port} var_display_max_depth=10 var_display_max_children=1000 var_display_max_data=10000 var_show_hidden=1"
            }
        },
        {
            "name": "Launch Built-in web server",
            "type": "php",
            "request": "launch",
            "runtimeArgs": [
                "-dxdebug.mode=debug",
                "-dxdebug.start_with_request=yes",
                "-S",
                "localhost:0"
            ],
            "program": "",
            "cwd": "${workspaceRoot}",
            "port": 9003,
            "serverReadyAction": {
                "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
                "uriFormat": "http://localhost:%s",
                "action": "openExternally"
            }
        }
    ]
}

Die Parameter für "Listen for Xdebug" werden übernommen und dann klappt auch alles. Was nicht funktioniert ist "
Launch currently open script" - egal ob ich das auswähle und auf Run klicke oder das Script auswähle und F5 drücke, die Parameter werden nicht übernommen. Wie man sieht habe ich es schon mit runTimeArgs probiert und auch als XDEBUG_CONFIG exportiert - geht beides nicht. Zusätzlich habe ich auf dem Server noch die Parameter in die zwei Configs geschrieben (weiss auch nicht warum es zwei gibt, php benutzt anscheinend nur die erste):
/etc/php/7.4/cli/conf.d/99-xdebug.ini
/etc/php/7.4/mods-available/xdebug.ini

Wenn ich php -i eingebe, sehe ich auch das alles stimmt:
Code:
php -i | grep xdebug
/etc/php/7.4/cli/conf.d/99-xdebug.ini
....
xdebug.var_display_max_children => 1000 => 1000
xdebug.var_display_max_data => 10000 => 10240
xdebug.var_display_max_depth => 10 => 10

1639406460539.png


Wie schaffe ich es, dass die Parameter korrekt an PHP / xDebug übergeben werden wenn ich "Launch currently open script" mache oder einfach F5 drücke in VS Code? Ich habe das Gefühl, dass die komplette JSON Datei komplett ignoriert wird, selbst wenn ich den Eintrag lösche, funktioniert F5 weiterhin, aber halt eben nur eingeschränkt. Der einzige (nervige) Weg wie ich im Moment debuggen ist, ist den Listener zu starten und dann das PHP Script über den Terminal auszuführen.
 
Habs bei mir grad mal getestet. Läuft "ebenso nicht". Hab es aber zum Laufen bekommen...

Läuft bei dir phpenv o.ä.? VSCode sieht deine Aliase und Funktionen nicht, ergo auch nicht die Shims zur Executable.

Wie löst bei dir $ which -a php auf? Und was sagt
Code:
for var in $(which -a php); do echo "$var"; "$var" --version | grep -i xdebug; done
? Xdebug überall geladen? Weiterhin solltest du auch mal nachprüfen welche PHP Executable von VSCode gestartet wird. Also einfach mal mit phpinfo() nachprüfen. Bei mir war es immer die ohne eingebundenes Xdebug. ;)
 
Sorry für die späte Antwort, war noch mit log4j beschäftigt am WE und Montag :)

Bash:
ubuntu@ip-10-133-7-15:~/repo$ which -a php
/usr/bin/php
/bin/php
ubuntu@ip-10-133-7-15:~/repo$ for var in $(which -a php); do echo "$var"; "$var" --version | grep -i xdebug; done
/usr/bin/php
    with Xdebug v3.1.1, Copyright (c) 2002-2021, by Derick Rethans
/bin/php
    with Xdebug v3.1.1, Copyright (c) 2002-2021, by Derick Rethans
ubuntu@ip-10-133-7-15:~/repo$ ls -la /usr/bin/php
lrwxrwxrwx 1 root root 21 Nov 16 14:51 /usr/bin/php -> /etc/alternatives/php
ubuntu@ip-10-133-7-15:~/repo$ ls -la /bin/php
lrwxrwxrwx 1 root root 21 Nov 16 14:51 /bin/php -> /etc/alternatives/php
ubuntu@ip-10-133-7-15:~/repo$

Also, ich habe nur ein php installiert ohne phpenv und es wird auch xdebug geladen. Ich habe mal ein phpinfo() ausführen lassen über den Knopf rechts oben (bzw. F5) und dort passt auch alles. Php inkl. xdebug mit den richtigen Optionen wird geladen. Es ist so weird...

Hauptproblem ist eben, dass ich so nicht debuggen kann da die Objekte nicht korrekt im Debugger dargestellt werden - da fehlen mir teilweise die Hälfte der Member.

Selbst wenn ich auf "Listen for Xdebug" klicke und dann F5 drücke, funktioniert es nicht. Es funktioniert tatsächlich nur wenn ich "Listen for Xdebug" ausführe und dann übers Terminal PHP starte. So merkwürdig

1639557710175.png
 
Zuletzt bearbeitet:
Klappt hier alles:

1639564646029.png


Die launch.json etwas angepasst:
JSON:
{
    "name": "Launch currently open script",
    "type": "php",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "port": 0,
    "runtimeArgs": [
        "-dxdebug.start_with_request=yes"
    ],
    "env": {
        "XDEBUG_MODE": "debug,develop",
        "XDEBUG_CONFIG": "client_port=${port}"
    },
    "log": true,
    "xdebugSettings": {
        "max_data": 1000,
        "max_children": 1000,
        "max_depth": 10
    }
},
Falc410 schrieb:
Selbst wenn ich auf "Listen for Xdebug" klicke und dann F5 drücke, funktioniert es nicht.
Das sollte auch nicht klappen, da der Port nicht gesetzt bzw. dynamisch von VSCode festgelegt und an die Binary via XDEBUG_CONFIG übergeben wird. Könnte natürlich klappen, wenn du den Port in der Config festgelegt hast, aber das hab ich nun nich getestet.
Falc410 schrieb:
Es funktioniert tatsächlich nur wenn ich "Listen for Xdebug" ausführe und dann übers Terminal PHP starte. So merkwürdig
Dann sieh dir mal an was da unterschiedlich ist. Irgendwas muss ja anders sein, damit es korrekt getriggert wird. Kannst ja den Code von oben nehmen und ein bisschen debuggen.
PHP:
var_dump([
    "exe" => exec("readlink -f /proc/" . posix_getpid() . "/exe"),
    "cmdline" => exec("cat /proc/" . posix_getpid() . "/cmdline"),
    "env" => exec("cat /proc/" . posix_getpid() . "/environ"),
]);
 
  • Gefällt mir
Reaktionen: Falc410
Ich habe die launch.json jetzt noch einmal so angepasst wie bei dir - so hatte ich es am Anfang und siehe da, es funktioniert wenn ich die Run Config auswähle und den grünen Pfeil klicke! Jetzt übernimmt er die Parameter.

Es klappt ebenso wenn ich F5 drücke bzw. im Menü auf Run -> Start Debugging klicke. Wo es nicht funktionert ist, wenn ich rechts oben den Knopf drücke (Debug PHP). Den habe ich halt tatsächlich meistens angeklickt.
Echt merkwürdig, dass sich VS Code so unterschiedlich verhält. Ich hätte erwartet, der Knopf und F5 sind ein und die selbe Funktion.
1639565975786.png
 
Damit läuft bei mir auch nur diese Launch Config.

1639566546292.png


Also bei mir verhält es sich identisch.
 
  • Gefällt mir
Reaktionen: Falc410
Ich frag mich wo der Unterschied ist. Die env nd cmdline sind doch identisch? Nur ganz andere xdebug Settings. Die Frage ist welche Funktion dieser Knopf aufruft - F5 kann es ja nicht sein.
 
Zurück
Oben