How can I get XDebug to run with PHPUnit on the CLI?

39,511

Solution 1

The xdebug.profiler_enable setting can't be changed at runtime but only at the start of script.

Running phpunit -d foo=bar will just lead to phpunit calling ini_set("foo", "bar"); and that doesn't work since the value can't change at runtime.

See: xdebug.profiler_enable

Enables Xdebug's profiler which creates files in the profile output directory. Those files can be read by KCacheGrind to visualize your data. This setting can not be set in your script with ini_set(). If you want to selectively enable the profiler, please set xdebug.profiler_enable_trigger to 1 instead of using this setting.

Solution:

php -d xdebug.profiler_enable=on /usr/bin/phpunit XYZTestCase.php

By applying the setting directly to the PHP runtime and not phpunit it will be set before the script starts and should work.

Solution 2

Spent ages trying to get this to work. Think this may change my life though!

I originally was trying to do this (i.e. run phpunit) inside a vagrant box but realised it was easier (and faster performance wise) running it outside the vagrant box.

First off I used brew install php55 php55-xdebugusing homebrew on a mac (but your configuration may be different and it should still work). My site is a symfony2 project.

I was trying to follow this: phpunit vagrant xdebug to get it working from inside a vagrant box (almost got there but with some issues).

These settings worked for me (running site from a vagrant box, but phpunit outside vagrant box):

#xdebug.ini (parent machine, not inside vagrant box).
[xdebug]
zend_extension="/usr/local/Cellar/php55-xdebug/2.2.6/xdebug.so" #this will be different on your machine and will probably already be set

xdebug.max_nesting_level = 250 
xdebug.default_enable = 1
xdebug.idekey = "PHPSTORM" #seems to work without this too
xdebug.remote_enable = 1

Then running this at the command line (here I am using a download of phpunit instead of the one linked to in /usr/local/bin (which doesn't seem to work))

XDEBUG_CONFIG="idekey=PHPSTORM" bin/phpunit -c app

Or you can create a file called phpunit-debug (to store the XDEBUG_CONFIG environment variable) as outlined here: phpunit xdebug

Solution 3

Did you try to :

  1. Set your xdebug.idekey in your php.ini to wathever you want (eg: blacktie)
  2. restart your server

  3. Call you script by adding -d xdebug.idekey=blacktie

    phpunit -d xdebug.profiler_enable=on -d xdebug.idekey=blacktie XYZTestCase.php

Hope that help.

Solution 4

The correct name of the setting is xdebug.profiler_enable with an underscore. Change your command to this:

phpunit -d xdebug.profiler_enable=on XYZTestCase.php

Solution 5

You can run Xdebug from the command line by setting an environment variable beforehand, e.g.:

export XDEBUG_CONFIG="idekey=YOUR_IDE_KEY remote_host=localhost remote_enable=1"

This worked for me.

More information on the Xdebug documentation.

Share:
39,511
blacktie24
Author by

blacktie24

Updated on June 05, 2020

Comments

  • blacktie24
    blacktie24 about 4 years

    I've tried running the following CLI command:

    phpunit -d xdebug.profiler_enable=on XYZTestCase.php
    

    but it just runs as normal. Can anyone point me in the right direction?? Thx!

    Here's the XDebug settings:

    xdebug
    
    xdebug support => enabled
    Version => 2.1.2
    
    Supported protocols => Revision
    DBGp - Common DeBuGger Protocol => $Revision: 1.145 $
    
    Directive => Local Value => Master Value
    xdebug.auto_trace => Off => Off
    xdebug.collect_assignments => Off => Off
    xdebug.collect_includes => On => On
    xdebug.collect_params => 0 => 0
    xdebug.collect_return => Off => Off
    xdebug.collect_vars => Off => Off
    xdebug.default_enable => On => On
    xdebug.dump.COOKIE => no value => no value
    xdebug.dump.ENV => no value => no value
    xdebug.dump.FILES => no value => no value
    xdebug.dump.GET => no value => no value
    xdebug.dump.POST => no value => no value
    xdebug.dump.REQUEST => no value => no value
    xdebug.dump.SERVER => no value => no value
    xdebug.dump.SESSION => no value => no value
    xdebug.dump_globals => On => On
    xdebug.dump_once => On => On
    xdebug.dump_undefined => Off => Off
    xdebug.extended_info => On => On
    xdebug.file_link_format => no value => no value
    xdebug.idekey => Nam => no value
    xdebug.manual_url => http://www.php.net => http://www.php.net
    xdebug.max_nesting_level => 100 => 100
    xdebug.overload_var_dump => On => On
    xdebug.profiler_aggregate => Off => Off
    xdebug.profiler_append => Off => Off
    xdebug.profiler_enable => Off => Off
    xdebug.profiler_enable_trigger => Off => Off
    xdebug.profiler_output_dir => c:/wamp/tmp => c:/wamp/tmp
    xdebug.profiler_output_name => cachegrind.out.%t.%p => cachegrind.out.%t.%p
    xdebug.remote_autostart => On => On
    xdebug.remote_connect_back => Off => Off
    xdebug.remote_cookie_expire_time => 3600 => 3600
    xdebug.remote_enable => On => On
    xdebug.remote_handler => dbgp => dbgp
    xdebug.remote_host => localhost => localhost
    xdebug.remote_log => no value => no value
    xdebug.remote_mode => req => req
    xdebug.remote_port => 9000 => 9000
    xdebug.scream => Off => Off
    xdebug.show_exception_trace => Off => Off
    xdebug.show_local_vars => Off => Off
    xdebug.show_mem_delta => Off => Off
    xdebug.trace_format => 0 => 0
    xdebug.trace_options => 0 => 0
    xdebug.trace_output_dir => \ => \
    xdebug.trace_output_name => trace.%c => trace.%c
    xdebug.var_display_max_children => 128 => 128
    xdebug.var_display_max_data => 512 => 512
    xdebug.var_display_max_depth => 3 => 3
    
  • blacktie24
    blacktie24 almost 12 years
    David, I fixed the name of the setting, but it still does not work :( any other ideas?
  • David Harkness
    David Harkness almost 12 years
    @blacktie24 - Add var_dump(ini_get('xdebug.profiler_enable')) to your bootstrap.php file to verify that the setting is being applied by PHPUnit.
  • JhovaniC
    JhovaniC almost 10 years
    Try -dxdebug.profiler_enable=On -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_port=9000 /path/to/phpunit XYZTestCase.php
  • timhc22
    timhc22 over 9 years
    setting -d xdebug.idekey=PHPSTORM did not seem to work for me, hence the XDEBUG_CONFIG environment variable
  • Salvatore Zappalà
    Salvatore Zappalà almost 8 years
    Make sure that the idekey is the same that is set in your IDE/debugger
  • Nicolas BADIA
    Nicolas BADIA over 7 years
    To specify the output path: php -d xdebug.profiler_enable=on -d xdebug.profiler_output_dir=/my_path /usr/bin/phpunit XYZTestCase.php
  • Brian Dunne
    Brian Dunne over 4 years
    This worked for me on Ubuntu, although I was hung up for a while because of the way Ubuntu sets up separate php.ini files for apache/CLI/fpm. If anyone's got XDebug working through their browser but not their command line, make sure you've got the XDebug-enabling options added to each of the appropriate php.ini files - the output of php -v from the command line will contain some XDebug info if your CLI PHP configuration is set up properly for XDebug.