#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.ini2. @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. Хорошо, итак, профилировщик не является зависимостью для получения рабочего решения. Я считаю это полезным, но не обязательным для установления правильного сеанса отладки.