我如何让XDebug在CLI中使用PHPUnit运行?

我试过运行下面的CLI命令:

phpunit -d xdebug.profiler_enable=on XYZTestCase.php 

但它正常运行。 任何人都可以指出我在正确的方向? 谢谢!

这是XDebug设置:

 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 

xdebug.profiler_enable设置不能在运行时更改,只能在脚本开始时更改

运行phpunit -d foo=bar会导致phpunit调用ini_set("foo", "bar"); 而这是行不通的,因为这个值在运行时不能改变。

请参阅: xdebug.profiler_enable

启用在configuration文件输出目录中创build文件的Xdebug的configuration文件。 这些文件可以通过KCacheGrind读取以可视化您的数据。 无法在脚本中使用ini_set()设置此设置。 如果您想select启用分析器,请将xdebug.profiler_enable_trigger设置为1,而不是使用此设置。

解:

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

通过将设置直接应用于PHP运行时而不是phpunit,它将在脚本启动之前设置并应该工作。

花了很多时间试图让这个工作。 想想这可能会改变我的生活!

我原本是试图做到这一点(即运行phpunit)在一个stream浪箱内,但意识到这是更容易(和更快的性能明智)跑在stream浪箱外。

首先我使用brew install php55 php55-xdebug在Mac上使用自制软件brew install php55 php55-xdebug (但是你的configuration可能不同,它应该仍然可以)。 我的网站是一个symfony2项目。

我试图遵循这个: phpunit vagrant xdebug让它在一个stream浪者的框内工作(几乎到了那里,但有一些问题)。

这些设置为我工作(运行网站从一个stream浪的箱子,但phpunit以外的stream浪者箱):

 #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 

然后在命令行运行(这里我使用的是下载的phpunit,而不是链接到/ usr / local / bin(这似乎不起作用))

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

或者,您可以创build一个名为phpunit-debug(用于存储XDEBUG_CONFIG环境variables)的文件,如下所述: phpunit xdebug

你有没有尝试:

  1. 在你的php.ini中设置你的xdebug.idekey为你想要的(例如:blacktie)
  2. 重启你的服务器

  3. 通过添加-d xdebug.idekey = blacktie来调用脚本

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

希望有所帮助。

该设置的正确名称是带有下划线的xdebug.profiler_enable 。 改变你的命令:

 phpunit -d xdebug.profiler_enable=on XYZTestCase.php 

您可以通过预先设置环境variables来从命令行运行Xdebug,例如:

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

这对我有效。

有关Xdebug文档的更多信息。

假设你的编辑器/独立debugging器在被cookie / post / getvariables触发时已经有了Xdebug的工作,添加一个shell脚本来做同样的触发,所以你不需要记住:

创build~/bin/php-cli-debug.sh

 #!/bin/bash phpfile="$1" idekey=YOUR_IDE_KEY shift 1 php -d'xdebug.remote_enable=1' -d'xdebug.remote_autostart=1' -d'xdebug.idekey='"$idekey" -f "$phpfile" -- "$@" 

然后在CLI上debugging东西,使用如下所示:

 $ php-cli-debug.sh "$(which phpunit)" --bootstrap tests/bootstrap.php tests/FooBarTest | less -S 

确保你的.bashrc已经将~/bin添加到你的$PATH