Крайне скудна информация о настройке XDebug в офф. документации
Решил поделится личным опытом настройки XDebug в Visual Studio Code для работы с проектами в VMBitrix7.5.1
Предполагается что VMBitrix установлена и настроена сеть как "Сетевой мост",
с доступом к серверу по ssh по IP 192.168.0.xxx (см. статью
В виртуальную машину включён Xdebug из коробки, по этому ставить его не нужно.
0) в консоли сервера определяем IP хоста
echo $SSH_CLIENT | awk '{ print $1}' |
1) в VSCode устанавливаем плагин
Name: PHP Debug
Id: xdebug.php-debug
2) смотрим ключ IDE какой указана в настройках плагина (по дефолту там "vsc", его и указываем в .ini в параметре xdebug.idekey)
VSCode File > Preference > Settings > Extensions > PHP Debug > Ide Key.
3) создаем файл если нет
touch /etc/php.d/z_bx_custom.ini |
4) прописываем в /etc/php.d/z_bx_custom.ini такие конфиги (192.168.0.102 это IP хоста c IDE, на него xdebug будет отправлять данные через 9003 порт)
zend_extension = xdebug.so xdebug.start_with_request = yes xdebug.discover_client_host = true xdebug.client_host = 192.168.0.102 xdebug.client_port = 9003 xdebug.idekey = vsc xdebug.mode = debug,trace,profile xdebug.collect_params = 3 xdebug.trace_output_name = trace.%R.%u xdebug.profile_output_name = cachegrind.out.%R.%u xdebug.output_dir = /tmp xdebug.log = /tmp/xdebug.log |
5) перезапускаем Apache для обновления конфигураций
service httpd restart |
6) можем просмотреть настройки Xdebug введя команду в консоли
php -r 'xdebug_info();' | less -R |
7) в VSCode создаем файл .vscode/launch.json с такими параметрами
{ "version": "0.2.0", "configurations": [ { "name": "remote XDebug", "type": "php", "request": "launch", "hostname": "192.168.0.102", "port": 9003, "pathMappings": { "/": "${workspaceRoot}" } }, ] } |
Настройки окончены, далее создаем тестовый файл /test/index.php с элементарным кодом
<? $var=1; $var++; echo $var; $str = "Xdebug"; function ret_ord( $c ) { return ord( $c ); } foreach ( str_split( $str ) as $char ) { echo $char, ": ", ret_ord( $char ), "\n"; } ?> |
открываем его в VSCode, выставляем брейкпоинты, и отлаживаем как в этом примере
---------------------------------------------------------------------------------------------------------------------
ВАЖНО:
параметр "pathMappings" содержит пути на удаленном сервере и на локальной машине
где "/" - это адрес папки с кодом (проектом) на сервере,
а "${workspaceRoot}" путь к локальным копиям файлов проекта
ВАЖНО:
смотрим логи xdebug командой в консоли
tail -f /tmp/xdebug.log |
там может быть ошибка связанная с не верно указанными путями в "pathMappings",
из за чего не появляются переменные в блоке "VARIABLES" в расширении VSCode "PHP Debug" (по сути отладка не работает).
Для этого смотрим настройки соединения с удаленным сервером в .vscode\sftp.json (Ctrl+Shift+P) параметр "remotePath"
и если там указано "remotePath": "/" (т.е корень сервера) то и в .vscode/launch.json должно быть соответственно.
[14044] [Step Debug] <- breakpoint_set -i 7 -t line -f file:///home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php -n 3 [14044] [Step Debug] WARN: Breakpoint file name does not exist: /home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php (No such file or directory). [14044] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" id="140440038" resolved="unresolved"></response> |
Ссылки по теме:
KCacheGrind для Linux
QCacheGrind для Windows