Laran Evans
Laran Evans

Reputation: 1313

How can I debug a PHP CLI script with xdebug?

I haven't quite figured this out. EVERY piece of documentation I've found covers how to use xdebug to debug scripts running in Apache. I need to debug a php CLI script.

So, for instance, how do I pass the XDEBUG_SESSION_START variable in to get xdebug to kick on?

I'm specifically trying to debug a CakePHP shell. So if anyone has any additional insight into that I'd be very appreciative.

Thanks.

Upvotes: 29

Views: 32076

Answers (5)

Michas
Michas

Reputation: 9428

PHP configuration:

zend_extension=xdebug.so
xdebug.discover_client_host=1
xdebug.client_host=localhost
xdebug.mode=debug

On my system it is the file /etc/php/conf.d/xdebug.ini. The configuration could be in the main php.ini too.

If I want to run a script with XDebug, I pass the environment variable inline:

XDEBUG_SESSION=1 php arguments

Upvotes: 1

8ctopus
8ctopus

Reputation: 3237

For Windows and Visual Studio Code here's how to proceed:

  1. Download xdebug from https://xdebug.org/download. For example php 7.4 Windows 64bit https://xdebug.org/files/php_xdebug-2.9.5-7.4-vc15-nts-x86_64.dll

  2. Copy the xdebug dll to your php extensions dir (ext).

  3. Add to the end of php.ini

    [XDebug]
    zend_extension=php_xdebug-2.9.5-7.4-vc15-nts-x86_64.dll

    xdebug.remote_enable=1
    xdebug.remote_autostart=1
  1. Open VSCode and install https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug

  2. Open the project workspace in VSCode, go to Run tab, click the cogwheel and add these lines

    {
      "name": "listen CLI",
      "type": "php",
      "request": "launch",
      "port": 9000
    },
    {
      "name": "run CLI",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 9000
    }
  1. Place a break point in the script you want to debug

  2. Select "run CLI" and click "Start Debugging"

Happy debugging!

Upvotes: 1

Pascal MARTIN
Pascal MARTIN

Reputation: 400922

There is a couple of notes about that in Xdebug's manual, like, for instance (quoting) :

export XDEBUG_CONFIG="idekey=session_name"
php myscript.php

If you are using Eclipse PDT to develop and debug your PHP scripts, there is not much difference between Apache or CLI : the configuration lloks quite the same, you just don't have to configure a web server, nor indicate an URL ; instead, you have to indicate the path to the PHP executable.

About the XDEBUG_SESSION_START variable : well, you launch the whole script in "debug-mode", so you don't have any notion of "debugging-session", I'd say.


For instance, here's what Window > Preference > PHP > PHP executables looks like for me right now, and, on the right, what I get when clicking on the Edit button of the first one :


(source: pascal-martin.fr)
   
(source: pascal-martin.fr)

And the debug configurations window :


(source: pascal-martin.fr)

And launching the debugging: it just works :


(source: pascal-martin.fr)


Hope this helps :-)

Else, what specific problem do you encounter ?

Upvotes: 42

Plamen
Plamen

Reputation: 175

If you're using bash (or similar shell), this little script might come in handy:

alias drush-debug=drd
function drd {
    export XDEBUG_CONFIG="idekey=cli_session"
    export SERVER_NAME="developer.machine"
    export SERVER_PORT="9000"
    drush "$@"
    unset XDEBUG_CONFIG
    unset SERVER_NAME
    unset SERVER_PORT
};

or as suggested by the commentators below

alias drd='XDEBUG_CONFIG="idekey=PHPSTORM" drush "$@"'

This way you don't have to manually set and unset the trigger variable each time you want to debug.

Upvotes: 9

Niels
Niels

Reputation: 49

simply put the following section to your php.ini

[XDebug]
xdebug.max_nesting_level = 200
xdebug.remote_enable=1
xdebug.remote_port=9000
;xdebug.profiler_enable=1
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=1

and replace PHPSTORM with your ide key

Upvotes: 4

Related Questions