Как правильно настроить VSCode и Wampserver для отладки и приостановки в строке точки останова, используя расширение VSCode / PHP XDebug / PHP Debug?

#php #visual-studio-code #xdebug #wampserver

#php #visual-studio-code #xdebug #wampserver

Вопрос:

Что мне нужно сделать, чтобы решить эту проблему, мешающую мне продолжить отладку в VSCode 1.51.0 с использованием расширения xdebug на php вместе с расширением отладки PHP версии 1.13.0 в VS Code Феликса Беккера?

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:81n'  
          '    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: 81n'  
          '}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>
  

Комментарии:

1. Пожалуйста, проверьте документацию Xdebug о том, что такое порт Xdebug и как все это работает. Короче говоря: 1) это Xdebug, который подключается к клиенту отладки (VSCode в вашем коде), а НЕ наоборот 2) Порт Xdebug должен ОТЛИЧАТЬСЯ от порта вашего веб-сайта. "port": 81, здесь просто неправильно — вы не можете указать VSCode прослушивать порт 81, когда ваш Apache уже использует его. Это должен быть тот же порт, который у вас есть в php.ini

2. @LazyOne, спасибо за подсказку, сейчас я публикую полный ответ на свой вопрос

Ответ №1:

Я решил проблему и заставил мое приложение остановиться на указанной точке останова в моем приложении.

После того, как я отметил предложения в первом комментарии к исходному вопросу, я изменил свой широковещательный порт XDebug на 9000 в php.ini и установил и настроил мой файл конфигурации запуска json для прослушивания 9000 в моем каталоге проекта, и установил мой php.ini xdebug.remote_port = "9000" , и xdebug.remote_mode = "req" . Затем установите для моего порта прослушивания значение 80 в httpd.conf, а для всех портов виртуального хоста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
  

Комментарии:

1. Вы могли бы сохранить 81 для Apache — это нормально (но да, 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"
    }
  ]
  

Комментарии:

1. Привет, Халифа, большое тебе спасибо за твой ответ, можешь ли ты указать, где или в какой строке предоставленное решение отличается от предоставленного решения? Спасибо.

2. Параметры профилировщика и pathMappings.

3. Хорошо, итак, профилировщик не является зависимостью для получения рабочего решения. Я считаю это полезным, но не обязательным для установления правильного сеанса отладки.