UPDATE: PHP 8 and Xdebug 3 2021.07.18

Ok this took a bit since the Xdebug site talks about arch -x86_64 sudo pecl install xdebug which did not work.

I just did the normal

sudo pecl install xdebug

Then I edit the addition it made:

/opt/homebrew/etc/php/8.0/php.ini

zend_extension="xdebug.so"
xdebug.mode = debug
xdebug.start_with_request = yes

I moved it all to the bottom of the file too. The docs talk about OPCache but not sure this really helped.

Anyways after this and a PHP restart (see below) it all worked.

I ran valet restart since I am using that for PHP.

Then ran php -v to see

PHP 8.0.8 (cli) (built: Jul 12 2021 02:58:53) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans
    with Zend OPcache v8.0.8, Copyright (c), by Zend Technologies

And my launch.json for VSCode is

{
    // 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
        },
        {
            "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}"
            }
        },
        {
            "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"
            }
        }
    ]
}

UPDATE: PHP 7.4 Every time I do value use php I then lose my xdebug setup :( here is me taking a moment to stop having that happen

vim /usr/local/etc/php/7.4/php.ini

Then add this

[PHP]


zend_extension="xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_mode = req

And then I am set again! Notice I am using 9000 above my insanity of using 9005 below has passed

I put two files in my home directory, one starts with the above and one does not. Then I put this alias into my ~/.zshrc

alias debug_on="cp ~/Code/php.ini.debugon /usr/local/etc/php/7.4/php.ini"
alias debug_off="cp ~/Code/php.ini.debugoff /usr/local/etc/php/7.4/php.ini"

source ~/.zshrc

and now I can easily turn this on and off to save TONS of time with any php job (testing, etc)

END UPDATE

This article got me going on using Xdebug https://tighten.co/blog/configure-vscode-to-debug-phpunit-tests-with-xdebug

But since 7.2 it has been tricky on the Mac.

pecl install xdebug

Then vim /usr/local/etc/php/7.2/php.ini

And remove from there any reference to xdebug.so

Then /usr/local/etc/php/7.2/conf.d/ext-xdebug.ini

[xdebug]
zend_extension="xdebug.so"
xdebug.remote_autostart=1
xdebug.remote_port=9005
xdebug.remote_enable=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/Users/alfrednutile/xdebugtmp/"

and restart the services

brew services restart php72 

You should be able to run php --ini at the command line.

>php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.2
Loaded Configuration File:         /usr/local/etc/php/7.2/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.2/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.2/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.2/conf.d/ext-xdebug.ini,
/usr/local/etc/php/7.2/conf.d/php-memory-limits.ini

Visual Code’s xdebug launch.json looks like:

{
  "version": "0.2.0",
  "configurations": [{
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9005
    },
    {
      "name": "Launch currently open script",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 9005
    }
  ]
}