代码之家  ›  专栏  ›  技术社区  ›  dotNET

在VSCode上调试Laravel应用程序

  •  1
  • dotNET  · 技术社区  · 6 年前

    是否有人成功地将VSCode配置为调试基于Laravel的网站?在阅读了大量的文章和教程之后,我终于可以让VSCode“倾听XDEBUG”,但是我还没有做到 正常的 VS风格的调试,我可以点击F5在我最喜欢的浏览器中启动当前网站,当它遇到断点时,它会进入VSCode,就像我们在完整的Visual Studio或Eclipse中所做的那样。

    我的机器上正确设置了以下内容:

    • VSCODE1.25.1版本
    • XAMPP 1.8版
    • XDEBUG(配置和工作)
    • VSCode的PHP调试扩展

    我不确定我需要在我的 launch.json . PHP调试扩展附带的两个配置如下所示:

    {
        "name": "Listen for XDebug",
        "type": "php",
        "request": "launch",
        "port": 9000
    },
    {
        "name": "Launch currently open script",
        "type": "php",
        "request": "launch",
        "program": "${file}",
        "cwd": "${fileDirname}",
        "port": 9000
    }           
    

    虽然第一个配置工作正常(我可以在VSCode中以该模式开始调试,然后在浏览器中单独启动我的网站,然后它会到达断点),但第二个配置失败。它告诉我它找不到 Controller 类(这是一个Laravel框架类)。使用命名空间限定类名也没有任何好处。

    我猜这与启动配置的设置有关。它试图将活动脚本作为一个独立的单元启动,因此无法定位位于不同文件中的框架类的定义。我们必须以某种方式提供作为单一应用程序启动网站。

    有没有人成功地做到了,告诉我我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  7
  •   dotNET    5 年前

    终于成功了。如果其他人需要的话,这里有一些东西。

    1. 确保在Apache服务器上安装并运行XDEBUG。
    2. 为您喜爱的浏览器安装调试器扩展。扩展可用于Chrome、Edge和FireFox(可以在VSCode中搜索和安装)。
    3. 设置 launch.json 所以它同时启动两个配置。这是通过所谓的 复合结构 . 下面是我的PHP+XDEBUG和EDGE浏览器:

      {
          "version": "0.2.0",
          "compounds": [
              {
                  "name": "Launch & Debug",
                  "configurations": [ "Launch Program", "Launch localhost" ]
              }
      ],
      "configurations": [
          {
              "type": "php",
              "request": "launch",
              "name": "Launch Program",
              "cwd": "${workspaceRoot}",
              "port": 9000
          },
          {
              "name": "Launch localhost",
                  "type": "edge",
                  "request": "launch",
                  "url": "http://localhost/public",
                  "webRoot": "${workspaceRoot}"
              }
          ]
      }
      
    4. 根据本地设置(如站点地址、xdebug端口等)更新上述配置。
    5. 按F5,将启动调试会话。浏览器将自动启动,您可以点击断点。