【问题标题】:How to properly setup VSCode and Wampserver to be able to debug and pause on breakpoint line, using VSCode / PHP XDebug / PHP Debug Extension?如何使用 VSCode / PHP XDebug / PHP Debug Extension 正确设置 VSCode 和 Wampserver 以便能够在断点行进行调试和暂停?
【发布时间】:2021-02-23 20:09:42
【问题描述】:

我需要做些什么来解决这个问题,阻止我使用 php 上的 xdebug 扩展以及 Felix Becker 在 VS Code 上的 PHP Debug Extension v 1.13.0 继续在 VSCode 1.51.0 上进行调试?

httpd.conf

# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 81

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            // Change back to php
            "type": "php",
            "request": "launch",
            "hostname": "localhost",
            "port": 81,
            "log": true,
            // Deprecated 
            // "localSourceRoot": "/var/www/html/mysite",
            // "serverSourceRoot": "/var/www/html/mysite",
            // server -> local
            "stopOnEntry": true,
            // "cwd": "${fileDirname}"
        },
        {
            "type": "pwa-chrome",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://portaldev/",
            "webRoot": "${workspaceFolder}"
        }
    ]
}

Visual Studio 控制台出错 - 以管理员身份运行

  <- outputEvent
    OutputEvent {
      seq: 0,
      type: 'event',
      event: 'output',
      body: {
        category: 'console',
        output: 'Error: listen EACCES: permission denied 127.0.0.1:81\n' +
          '    at Server.setupListenHandle [as _listen2] (net.js:1289:21)\n' +
          '    at listenInCluster (net.js:1354:12)\n' +
          '    at GetAddrInfoReqWrap.doListen [as callback] (net.js:1493:7)\n' +
          '    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:65:10) {\n' +
          "  code: 'EACCES',\n" +
          "  errno: 'EACCES',\n" +
          "  syscall: 'listen',\n" +
          "  address: '127.0.0.1',\n" +
          '  port: 81\n' +
          '}\n'
      }
    }
    Error: listen EACCES: permission denied 127.0.0.1:81
        at Server.setupListenHandle [as _listen2] (net.js:1289:21)
        at listenInCluster (net.js:1354:12)
        at GetAddrInfoReqWrap.doListen [as callback] (net.js:1493:7)
        at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:65:10) {
      code: 'EACCES',
      errno: 'EACCES',
      syscall: 'listen',
      address: '127.0.0.1',
      port: 81
    }
    <- launchResponse
    Response {
      seq: 0,
      type: 'response',
      request_seq: 2,
      command: 'launch',
      success: false,
      message: 'listen EACCES: permission denied 127.0.0.1:81',
      body: {
        error: {
          id: 0,
          format: 'listen EACCES: permission denied 127.0.0.1:81',
          showUser: true
        }
      }
    }

Wampserver 配置设置 httpd-vhosts.conf

# Virtual Hosts
#
<VirtualHost *:81>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Require local
  </Directory>
</VirtualHost>


#
<VirtualHost *:81>
    ServerName portaldev
    DocumentRoot "c:/wamp64/www/portaldev"
    <Directory  "c:/wamp64/www/portaldev/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

#
<VirtualHost *:81>
    ServerName portallive
    DocumentRoot "c:/wamp64/www/liveportal"
    <Directory  "c:/wamp64/www/liveportal/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

【问题讨论】:

  • 请查看 Xdebug 文档,了解 Xdebug 端口是什么以及它是如何工作的。简而言之:1)它是 Xdebug 连接到调试客户端(代码中的 VSCode)而不是其他方式 2)Xdebug 端口必须与您的网站端口不同。 "port": 81, 在这里是错误的——当你的 Apache 已经在使用它时,你不能告诉 VSCode 监听端口 81。它必须与 php.ini 中的端口相同
  • @LazyOne,感谢您的提示,我现在发布我的问题的完整答案

标签: php visual-studio-code xdebug wampserver


【解决方案1】:

我解决了问题并让我的应用程序在我的应用程序中的指定断点处停止。

在注意到原始问题的第一条评论中的建议后,我在 php.ini 中将我的 XDebug broadcast port 更改为 9000 和在我的项目目录中设置并设置我的 launch configuration json 文件为 listen to 9000,并设置我的 php.ini xdebug.remote_port = "9000"xdebug.remote_mode = "req"。然后在 httpd.conf 中将我的 监听端口 设置为 80 并将所有 虚拟主机端口 设置为 80 在 httpd-vhosts.conf 中。

启动浏览器后,我通过转到 VS Code,单击并单击 (Run,然后单击 Debug(或按 F5),IDE 停止在最初设置的断点处(通过单击源代码行号的左侧并观察 作为断点出现的亮红色圆圈或圆点 .

浅灰色但空心的圆圈,或浅红色或粉红色的圆圈不是我的测试要调试的正确断点。

httpd.conf

# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80     <------------- Changed to 80 instead of 81

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [ 
        {
            "name": "Listen For XDebug",
            "type": "php",
            "port": 9000,  <----- Modified to default XDebug port 9000
            "request": "launch",
            "pathMappings": {
                "c:/wamp64/www/portaldev/": "${workspaceFolder}"
            }
        }
    ]
}

httpd-vhosts.conf

# Virtual Hosts

<VirtualHost *:80>    <------ Set to port 80
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Require local
  </Directory>
</VirtualHost>


#
<VirtualHost *:80>   <------ Set to port 80
    ServerName portaldev
    DocumentRoot "c:/wamp64/www/portaldev"
    <Directory  "c:/wamp64/www/portaldev/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

#
<VirtualHost *:80>    <------ Set to port 80
    ServerName portallive
    DocumentRoot "c:/wamp64/www/liveportal"
    <Directory  "c:/wamp64/www/liveportal/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

php.ini

; XDEBUG Extension
[xdebug]
zend_extension="c:/wamp64/bin/php/php7.3.12/ext/php_xdebug-2.9.8-7.3-vc15-x86_64.dll"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_mode = "req"         <------ Added to make the setup work
xdebug.remote_port = "9000"        <------ Set to 9000
xdebug.remote_log = "c:/wamp64/tmp/log"
xdebug.show_local_vars=0

【讨论】:

  • 您可以为 Apache 保留 81 - 这很好(但是是的,80 是默认值,因此更方便,因为您不必将其明确声明为 URL 的一部分)。 Xdebug 端口必须不同。默认情况下它是 9000,它可能与您可能已经安装在您的系统上的php-fpm 冲突(尽管在 Linux/Mac 上,而不是在 Windows 上)。即将推出的 Xdebug 3 将默认使用 9003。
【解决方案2】:

php 7.3.5 WAMP

就我而言,我必须使用以下内容:

zend_extension="c:/wamp64/bin/php/php7.3.5/zend_ext/php_xdebug-2.7.2-7.3-vc15-x86_64.dll"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="c:/wamp/tmp"
xdebug.show_local_vars=0

  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen For XDebug",
      "type": "php",
      "port": 9000,
      "request": "launch"
    }
  ]

【讨论】:

  • 嗨,Khalifa,非常感谢您的回复,您能否突出显示所提供的解决方案与所提供的解决方案存在差异的地方或哪一行?谢谢。
  • 分析器和 pathMappings 设置。
  • 好的,所以分析器不是获得工作解决方案的依赖项。我认为它很有用,但不需要建立正确的调试会话。
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多