Hollands Spoor

The Notebooks

Tag: windows

  • Debugging on Demand

    Als ik XAMPP gebruik voor lokaal werk aan PHP scripts, schakel ik telkens de Xdebugger aan en uit vanwege de vertraging van PHP door Xdebug. Als ik geen foutopsporing nodig heb, schakel ik Xdebug geheel uit.

    Er zijn goede aanbevelingen voor het versnellen van PHP bij gebruik van Xdebug, bijvoorbeeld hier en hier. Desondanks schakel ik Xdebug liever helemaal uit.

    Omdat ik in een Windows omgeving werk, schreef ik twee batch-bestanden die ik in de XAMPP directory plaats naast de bestaande batch-bestanden van XAMPP, apache_start.bat en apache_stop.bat.

    Het eerste script, apache_debug.ps1 start Apache op met actieve debugger. Dit doet hij door een blok met Xdebug instellingen in het PHP.ini bestand te injecteren, vlak voordat Apache wordt opgestart.

    Het tweede script herstart Apache zonder actieve debugger. Hier wordt het blokje Xdebug instellingen in commentaar verstopt, voordat Apache opstart.

    Voor het gemak heb ik ook een derde script dat de huidige debugstatus meldt. Soms vergeet ik of de debugger aan staat.

    Alle scripts werken ook al Apache als service draait.

    Installeren

    Kopieer de drie scripts naar de map met de XAMPP installatie, standaard is dat C:\XAMPP. Als XAMPP zich ergens anders bevindt, pas dan de $xamppDir declaratie aan die aan het begin van de scripts staat.

    Gebruik:

    Voer de scripts uit vanuit een terminal venster. Of gebruik onderstaande automatisering.

    Optionele verbetering:

    Gebruik eventueel deze VS Code integratie:

    Om VS Code de debugger automatisch aan en uit te laten schakelen, kunnen de volgende twee .vscode/tasks.json worden toegevoegd:

    1. Add two shell tasks in `.vscode/tasks.json`:

    – één taak om `apache_debug.ps1` uit te voeren voor foutopsporing begint;

    – één taak om `apache_restart.ps1` uit te voeren na de foutopsporing.

    2. Zorg ervoor dat deze taken worden uitgevoerd in PHP-debug configuratie in `.vscode/launch.json` door gebruik te maken van:

    – preLaunchTask

    – postDebugTask

    Voorbeeld `.vscode/tasks.json`

    {
      "version": "2.0.0",
      "tasks": [
        {
          "label": "xampp:enable-debug",
          "type": "shell",
          "command": "powershell",
          "args": [
            "-ExecutionPolicy",
            "Bypass",
            "-File",
            "c:\\\\xampp\\\\apache_debug.ps1"
          ],
          "problemMatcher": []
        },
        {
          "label": "xampp:disable-debug",
          "type": "shell",
          "command": "powershell",
          "args": [
            "-ExecutionPolicy",
            "Bypass",
            "-File",
            "c:\\\\xampp\\\\apache_restart.ps1"
          ],
          "problemMatcher": []
        }
      ]
    }

    Deze taken worden aangeroepen als het volgende wordt toegevoegd aan launch.json:

    Voorbeeld `.vscode/launch.json`(PHP Listen)

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Listen for Xdebug",
          "type": "php",
          "request": "launch",
          "port": 9003,
          "preLaunchTask": "xampp:enable-debug",
          "postDebugTask": "xampp:disable-debug"
        }
      ]
    }

    Na al deze toevoegingen start en stopt Xdebug naar gelang de status van de VSCode debugger.