Reputation: 15832
XDebug offers the configuration directive xdebug.profiler_enable_trigger
that allows to activate profiling by passing the GET or POST parameter "XDEBUG_PROFILE" when calling a script via HTTP. This is handy if you don't want profiling for ALL of your scripts but only for a few special cases without always changing your PHP configuration.
Is there a way to achieve the same behavior for command line PHP programs? I tried to pass the XDEBUG_PROFILE
as a command line argument but it didn't work.
In general, profiling command line PHP works well, but I'd like to have the same per-call-flexibility as with a browser and HTTP server.
Upvotes: 223
Views: 117321
Reputation: 1668
As @Steve Kirsch mentioned, you need to add -d xdebug.start_with_request=1
like this:
php -d xdebug.start_with_request=1 script.php
Upvotes: 0
Reputation: 279
I needed to add the following to my php.ini
:
xdebug.mode=debug
https://xdebug.org/docs/step_debug#configure
And the following to my .zshrc
export XDEBUG_SESSION=1
https://xdebug.org/docs/step_debug#activate-debugger-cmd
Upvotes: 1
Reputation: 4141
Welcome to xdebug 3!
It is now:
xdebug.mode=profile
therefore:
php -d xdebug.mode=profile script.php
Upvotes: 0
Reputation: 47308
Now enabling Xdebug for a single script would easily be accomplished using the XDEBUG_MODE
environment variable:
XDEBUG_MODE=profile php script_to_be_profiled.php
Upvotes: 9
Reputation: 77400
As described on the Xdebug Remote Debugging page, profiling can also be enabled via the XDEBUG_CONFIG
environment variable by inluding a "profile_enable=1" directive:
XDEBUG_CONFIG="profiler_enable=1" php ...
For ease of use, the above command line can be written as an alias:
alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'
The alias can be added to one of your shell's (interactive) startup scripts, such as ~/.bash_aliases
or ~/.bashrc
(as appropriate to your system).
Upvotes: 28
Reputation: 29
To start the script with debugging using PHP command line switches Set an environment variable that would tell XDebug to connect to IDE:
Windows / MacOS / Linux
export XDEBUG_CONFIG="idekey=123"
Here idekey should have a random value.
Launch PHP with the following command-line options:
php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php
You may use 10.0.2.2 instead of 127.0.0.1 with Vagrant (see related SO question).
Upvotes: 1
Reputation: 41
I created a shell script to handle client debugging.
script name: phpdebug
#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*
I placed this script in /usr/bin
and gave it execute permissions.
The script takes the arguments passed into phpdebug and calls php with the xdebug arguments and appends the arguments passed into the shell script, the $* on the end.
Upvotes: 4
Reputation: 10472
Similar, but different process for getting it to work with Netbeans while developing on a VM.
Need to pass in the remote enabled flag, the auto start flag, the ide flag, and the name of your remote host.
php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
Upvotes: 12
Reputation: 720
In PhpStorm 7 using WAMP I got this to work by copying my already working xdebug settings from C:\wamp\bin\apache\apache2.2.22\bin\php.ini to the xdebug section of C:\wamp\bin\php\phpX.Y.Z\php.ini. Then I ran my script like so:
php -d xdebug.idekey=PHPSTORM script.php
This even worked for debugging laravel artisan scripts
php -d xdebug.idekey=PHPSTORM artisan db:seed --force
Upvotes: 2
Reputation: 858
with PhpStorm on remote webserver i use this command:
XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php
where server_name
stands for name of the server in PhpStorm project conifuguration
Upvotes: 38
Reputation: 2340
I got this working on Ubuntu/Netbeans by:
Then it's simply a case of starting debugging in netbeans and doing "php myscript.php" at the command line.
Upvotes: 50
Reputation: 5858
You can pass INI settings with the -d
flag: php -d xdebug.profiler_enable=On script.php
.
Upvotes: 277