使用宅基地从 PHPStorm 调试 laravel artisan

Posted

技术标签:

【中文标题】使用宅基地从 PHPStorm 调试 laravel artisan【英文标题】:debugging laravel artisan from PHPStorm with homestead 【发布时间】:2015-03-12 05:54:15 【问题描述】:

我设置了 Laravel Homestead。然后我配置了 homestead xdebug.iniphpStorm 以使调试工作。

这是我在宅基地里的 xdebug.ini

zend_extension=xdebug.so
xdebug.remote_autostart = on
xdebug.remote_enable = on
xdebug.remote_connect_back = on
xdebug.remote_port = 9000
xdebug.idekey = "vagrant"

要开始调试会话,我遵循的步骤是

    在 PHPStorm --> 开始监听连接 在 PHPStorm 中设置断点 在我的浏览器中 --> 使用 XDebug Chrome Helper 或添加到我的 URL ?XDEBUG_SESSION_START= 加载页面

这非常有效。我的问题是,当我在 homestead 命令行中运行 php artisan 命令时,我无法让它达到我的断点。

我的尝试

    XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host="127.0.0.1" artisan mycommand

    php -d xdebug.profiler_enable=On artisan mycommand

    我还尝试设置 xdebug.remote_autostart=On 然后设置 sudo service php5-fpm restart 但我的断点仍然没有在 PHPStorm 中被击中

【问题讨论】:

你最终成功了吗? 【参考方案1】:

在最新版本的 Homestead 中,您可以使用 xphp artisan whatever 并且 phpstorm 会自动弹出一个窗口。

https://laravel.com/docs/8.x/homestead#debugging-cli-applications

【讨论】:

【参考方案2】:

有两点很重要:

    remote_connect_back 不能在 CLI 的情况下工作,因为 Xdebug 在控制台时无法检测到远程 IP 在 NAT 网络配置中使用 homestead / VirtualBox 时,您的开发机器(运行 PHPStorm)没有从 VM 内部看到的 IP 127.0.0.1。相反,它通常具有像10.0.2.2 这样的IP。要找出正确的 IP,请查看您的 Apache 的 access.log

以下内容对我有用:

php -dxdebug.remote_autostart=on -dxdebug.remote_connect_back=off 
  -dxdebug.remote_host=10.0.2.2 artisan
    edit 如果没有命中断点,则必须正确设置文件夹映射(因为 IDE 中的路径与 Web 服务器看到的不同:

    在您的 VM 中执行 export PHP_IDE_CONFIG="serverName=yourservername",其中 yourservername 是您在屏幕截图中“名称”下配置的内容

    使用 IDE 密钥和上面配置的服务器添加 PHP 远程调试配置

    并将您的 IDE 密钥和 remote_host 添加到 VM 的 XDEBUG-CONFIG

    export XDEBUG_CONFIG="idekey=artisan remote_host=10.0.2.2"

参考:http://randyfay.com/content/remote-command-line-debugging-phpstorm-phpdrupal-including-drush

【讨论】:

通过单击行首在 IDE 中添加断点。还是你在问别的? 使用这些参数可以部分工作:调试器在 artisan main() 处停止。我可以逐步完成自动加载过程,但是当我点击运行按钮时,它会错过命令的 fire() 方法中的断点 @SalvadorMaine:编辑了我的答案(参见步骤 3。) 我认为还有更多...我刚刚添加了第 4 点。试试看 这个答案应该被标记为正确!完美运行!【参考方案3】:

或者,如果这一切都太复杂或无法正常工作 - 您可以使用 url (route) 触发您的工匠命令

Artisan::call('whatever:command');

【讨论】:

太棒了。我浪费了我宝贵的生命中的 2 个小时来设置其他东西,但一切都是徒劳的。这是拯救这一天的精彩回复:-) 我过去尝试过配置它,但仍然没有成功....这确实是最简单的解决方案,我只是创建一个我将在部署时注释掉的路由...。有点只是在这个配置上浪费了很多时间,这似乎是一个可行的解决方案,谢谢。 它可以工作,但我希望我能弄清楚如何在没有它的情况下让它工作!如果有人得到解决方案,请发布!

以上是关于使用宅基地从 PHPStorm 调试 laravel artisan的主要内容,如果未能解决你的问题,请参考以下文章

PHPStorm、Xdebug 和远程调试(在 phpstorm 中使用 FTP)

PHPStorm - Laravel Eloquent 没有代码提示 [重复]

PhpStorm+Xdebug配置单步调试PHP

使用 PHPStorm 解决 PHPUnit xdebug 远程调试问题

PHPSTORM2020.1+Xdebug2.9.8远程调试

如何使用 ddev 和 PhpStorm 逐步调试 drush 命令?