如何正确设置 VSCode 和 Wampserver 以便能够使用 VSCode / PHP XDebug / PHP Debug Extension 在断点行进行调试和暂停?

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 1.51.0 上使用 php 上的 xdebug 扩展以及 PHP 调试扩展 v 继续调试Felix Becker 在 VS Code 上发布 1.13.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 广播端口 更改为 9000 php.ini 并将我的 启动配置 json 文件设置为 收听 9000在我的项目目录下,并设置我的php.inixdebug.remote_port = "9000"xdebug.remote_mode = "req"。然后在httpd.conf和所有中将我的监听端口设置为80 httpd-vhosts.conf.

中的虚拟主机端口80

启动浏览器后,我启动了调试器,方法是转到 VS Code,单击并单击 (运行,然后 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

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"
    }
  ]