Не работают точки останова в Xdebug

Рейтинг: 0Ответов: 1Опубликовано: 07.04.2023

Всем привет. Не срабатывают точки останова загадочным образом в xdebug. Выставляю точку останова -> Обновляю страницу в браузере -> Точка останова меняется с красного круга на серое кольцо (непроверенная точка останова).

При этом в сообщениях xdebug нет ошибок. Смущает только "Cannot evaluate code without a connection" - надпись, которая появляется, если ввести что-либо в консоль для отладки.

Пробовал так делать с включённым расширением xdebug helper в Chrome, пробовал с выключенным - результат такой же.

Использую: PHP + xdebug + Open Server + vscode

PHP: 8.0.22

xDebugger: 3.2.1-8.0-vs16-x86_64 (последний с оф сайта)

OpenServer: 5.4.3

VSCode: 1.77.1

Пробовал разные инструкции, но последний раз настраивал с помощью мастера настройки на сайте xdebugger.

Вот текущие настройки. Если их недостаточно и нужно что-то ещё, то дайте знать)

Полный вывод phpinfo(): https://arcean.ru/stack-overflow/php-info.html

Полный вывод xdebug_info(): https://arcean.ru/stack-overflow/xdebug-info.html

Настройки xdebug в workspace.json: https://arcean.ru/stack-overflow/workspace.json

php.ini (включён xdebug):

; ----------------------------
; Zend extensions
; ----------------------------

;zend_extension = opcache
zend_extension = xdebug

(включается автоматически при перезагрузке сервера)

php.ini (настройки xdebug):

[xdebug]
zend_extension="%sprogdir%/modules/php/%phpdriver%/ext/php_xdebug.dll"
xdebug.log="%sprogdir%/userdata/temp/xdebug/log/access.log"
xdebug.mode = debug
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.start_with_request = yes
xdebug.idekey = vsc
xdebug.discover_client_host= false

(пути прописываются автоматически при перезагрузки сервера)

Красная точка останова: Красная точка останова

Серая точка останова: Серая точка останова

Ответы

▲ 0

В общем, решить вопрос не удалось. Но я нашёл альтернативу и выяснил кое что интересное.

Начнём с альтернативы. Я установил плагин PHP Server в VSCode, чтобы заменить им OpenServer. Затем я скачал PHP 8.0 с официального сайта, создал папку PHP/PHP_8.0/ и разместил в ней файлы из zip-архива. В них было 2 php.ini-подобных файла, один ini-develop, второй ini-production (форматы по памяти написал). Я изменил php.ini-develop на php.ini.

Затем в настройках плагина PHP Server я добавил путь до php.exe и php.ini путь до php

После этого я начал редактирование php.ini. В нём я добавил строку zend_extension = xdebug после ;zend_extension=opcache. Затем спустился чуть ниже и после ; Module Settings ; добавил такие строки:

[xdebug]

xdebug.mode = debug
xdebug.idekey = vsc
xdebug.start_with_request = yes

Скриншот для наглядности:

настройки xdebug для php.ini

Ничего другого про xdebug в php.ini нет

Затем скачал последнюю версию xdebug, переименовал в php_xdebug.dll и разместил её в PHP/PHP_8.0/ext.

Вопреки многим инструкциям, в моем случае указывать путь до xdebug не нужно. Интерпретатор сам добавляет php_ и .dll для "xdebug", когда пытается его использовать. Поэтому достаточно было просто назвать файл php_xdebug.dll, разместить его в папке ext и добавить zend_extension = xdebug, чтобы сослаться на файл.

После этого я запустил php.exe, открылась консоль и я увидел в ней ошибку, что не удалось запустить xdebug. Я забрался в php.ini и указал в нём папку ext в пути для расширений

; On windows:
extension_dir = "ext"

После этого установил плагин xdebug в VSCode и расширение xdebug для Chrome. Мой текущий settings.json в VSCode:

"php.validate.executablePath": "C:/Program Files/PHP/PHP_8.0/php.exe",
"phpserver.phpPath": "C:/Program Files/PHP/PHP_8.0/php.exe",
"phpserver.phpConfigPath": "C:/Program Files/PHP/PHP_8.0/php.ini",
"php.debug.executablePath": ""

После всего этого счастья запустил xdebug в VSCode, установил точку останова, запустил сервер, включил расширение xdebug в Chrome, обновил страницу в браузере с исполняемым файлом и всё готово

Насчёт настройки сервера это всё Теперь к интересному. Когда я запустил php.exe в OpenServer, я увидел это: вывод консоли OpenServeer

Оказалось, что почти никакие модули в нём не работали. Может быть я допустил ошибку в установке, может что-либо ещё, но модули, которые я не трогал и которые только "из коробки", на сервере не работали. Так что проблема была в сервере