【问题标题】:debugging laravel artisan from PHPStorm with homestead使用宅基地从 PHPStorm 调试 laravel artisan
【发布时间】: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"

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

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

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

我的尝试

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

  2. php -d xdebug.profiler_enable=On artisan mycommand

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

【问题讨论】:

  • 你最终成功了吗?

标签: laravel vagrant xdebug laravel-routing homestead


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    有两点很重要:

    1. remote_connect_back 不能在 CLI 的情况下工作,因为 Xdebug 在控制台时无法检测到远程 IP
    2. 在 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
    
    1. edit 如果没有命中断点,则必须正确设置文件夹映射(因为 IDE 中的路径与 Web 服务器看到的不同:

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

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

    3. 并将您的 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 个小时来设置其他东西,但一切都是徒劳的。这是拯救这一天的精彩回复:-)
    • 我过去尝试过配置它,但仍然没有成功....这确实是最简单的解决方案,我只是创建一个我将在部署时注释掉的路由...。有点只是在这个配置上浪费了很多时间,这似乎是一个可行的解决方案,谢谢。
    • 它可以工作,但我希望我能弄清楚如何在没有它的情况下让它工作!如果有人得到解决方案,请发布!
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2016-04-20
    • 2016-04-17
    • 2019-06-15
    • 2015-12-09
    • 2015-02-28
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多