Xdebug laravel工匠命令

时间:2015-11-06 10:35:23

标签: php laravel command-line-interface xdebug artisan

我经常使用xdebug来调试应用程序,我已经构建了一个laravel应用程序,它上传了一个csv,将数据插入到数据库中,并将id插入作业队列。

我写了一个工匠命令,通过cron运行,然后对这些数据做一些事情。

Xdebug适用于通过浏览器访问该站点,但从cli运行时它不会破坏断点。

我运行php5-fpm。我的文件/etc/php5/fpm/php.ini/etc/php5/cli/php/ini 两者都包含以下设置:

zend_extension=/usr/lib/php5/20121212/xdebug.so 
xdebug.remote_enable = 1 
xdebug.idekey = 'dev_docker' 
xdebug.remote_autostart = 1 
xdebug.remote_connect_back = {{my host ip}} 
xdebug.remote_port = 9000 
xdebug.remote_handler=dbgp

然后我运行artisan命令

php artisan jobqueue::process --batch-size=10 --sleep=10

我知道命令正在运行 - > info(' text')显示在终端

任何人都知道我错过了什么?

5 个答案:

答案 0 :(得分:2)

如果您使用的是 XDebug 版本 3,请尝试:

php -dxdebug.mode=debug -dxdebug.client_host=host.docker.internal -dxdebug.client_port=9003 -dxdebug.start_with_request=yes artisan your:command

答案 1 :(得分:1)

根据xdebug.remote_connect_back文档,它使用$_SERVER['REMOTE_ADDR']来获取调试主机。我想在CLI中你必须使用xdebug.remote_host代替。

答案 2 :(得分:1)

也许这会对某人有所帮助。

总之我遇到了同样的问题,但我对接受的答案没有运气。我的解决方案是从命令行运行它:

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=on -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 artisan my:command

答案 3 :(得分:0)

我让它与remote_autostart = 1一起使用,并将PHP_IDE_CONFIG环境变量设置为“ serverName = localhost”。 localhost是PHPStorm中服务器配置的名称。 现在,当我运行php artisan时,可以在常规断点处中断。

让我更清楚:)

如果您已将xdebug与PHPStorm配合使用并有常规请求,则应执行此操作以使其与命令行php(artisan)一起使用。

您已经在PHPStorm中配置了路径,因此它知道应该使用断点向您显示哪个文件。这些路径在服务器下配置(首选项->语言和框架-> PHP->服务器)。

此服务器的名称应为PHP_IDE_CONFIG环境变量中的serverName值。

答案 4 :(得分:0)

如果使用 vagrant,则可以创建 artisandebug shell 文件。

#!/bin/bash
HOST=10.0.2.2

# xdebug 3
php -dxdebug.mode=debug -dxdebug.start_with_request=yes -dxdebug.client_host=$HOST -dxdebug.client_port=9003 artisan  "$@"

# xdebug < 3
# php -dxdebug.remote_autostart=on -dxdebug.remote_connect_back=off -dxdebug.remote_host=$HOST -dxdebug.client_port=9003 artisan  "$@"

感谢使其可执行并运行命令:

chmod +x artisandebug

./artisandebug some:command --there