Xdebug laravel artisan 命令

Posted

技术标签:

【中文标题】Xdebug laravel artisan 命令【英文标题】:Xdebug laravel artisan commands 【发布时间】:2016-02-07 11:37:00 【问题描述】:

我经常使用 xdebug 来调试应用程序,我已经构建了一个 laravel 应用程序,该应用程序需要上传 csv 文件,将数据插入数据库,并将 ids 插入作业队列。

我编写了一个通过 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') 显示在终端中

有人知道我错过了什么吗?

【问题讨论】:

这个相关问题对我很有帮助:***.com/q/27936323/470749 遇到了同样的问题,花了我一个多小时才弄明白,这是一个可行的解决方案***.com/questions/1947395/… 【参考方案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

【讨论】:

这对我不起作用。 Netbeans 仍然只是说“正在运行”,并没有停在标记线上。 你应该添加dxdebug.remote_autostart=on 你好,Boroboris,你能看看你能不能回答这个相关的问题? ***.com/questions/54711818/… 这应该被标记为正确答案。 xdebug.remote_autostart=on 就是那个。 如果使用 docker:-dxdebug.remote_host=host.docker.internal【参考方案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

【讨论】:

【参考方案3】:

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

让我更清楚:)

如果您已经让 xdebug 与 PHPStorm 和常规请求一起工作,那么您应该这样做以使其与命令行 php(工匠)一起工作。

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

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

【讨论】:

终于!我使用了正确的 xdebug 配置,但 xdebug 总是失败。问题是我需要在 phpstorm 中使用正确的端口设置服务器配置,并且 xdebug 正在运行。【参考方案4】:

如果你使用 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

【讨论】:

【参考方案5】:

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

【讨论】:

嗨,Furgas,你能看看你能不能回答这个相关的问题? ***.com/questions/54711818/…【参考方案6】:

用于使用 xdebug 3.1.1 和 docker 进行分析

php 
-dxdebug.mode=profile 
-dxdebug.client_host=IP_SERVICE_WITH_PHP 
-dxdebug.client_port=XDEBUG_CLINT_PORT 
-dxdebug.start_with_request=yes 
-dxdebug.output_dir=/tmp 
artisan ARTISAN_COMMAND

例子

php -dxdebug.mode=profile -dxdebug.client_host=172.19.0.3 -dxdebug.client_port=9003 -dxdebug.start_with_request=yes -dxdebug.output_dir=/tmp artisan help

【讨论】:

【参考方案7】:
php -dxdebug.mode=debug -dxdebug.client_host=localhost -dxdebug.client_port=9003 -dxdebug.start_with_request=yes artisan ARTISAN_COMMAND

【讨论】:

请在您的答案中添加一些解释,以便其他人可以从中学习

以上是关于Xdebug laravel artisan 命令的主要内容,如果未能解决你的问题,请参考以下文章

使用宅基地从 PHPStorm 调试 laravel artisan

Laravel 的Artisan 命令学习

Laravel 5 - 为包创建 Artisan 命令

Laravel自定义artisan命令在Sell中运行

Laravel artisan 命令工具

在 laravel 5 中运行 artisan 命令