https://xdebug.org/ - оф.сайт
Установка
https://howto.biapy.com/en/debian-gnu-linux/servers/php/install-the-php-extension-xdebug-on-debian
https://2bits.com/articles/setting-up-xdebug-dbgp-for-php-on-debian-ubuntu.html
Вариант1:
aptitude install php5-xdebug
Для Jessie 8.7 устанавливается версия 2.2.5 от начала 2014 года, сносим
Вариант2.
aptitude install php-pear php5-dev
pecl install xdebug
Получаем сообщение об успешной установке свежей версии 2.5 и необходимости прописать бибилиотеку в php.ini
Build process completed successfully
Installing '/usr/lib/php5/20131226/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.5.0
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib/php5/20131226/xdebug.so" to php.ini
INSTALLATION INSTRUCTIONS
| =========================
|
| See http://xdebug.org/install.php#configure-php for instructions
| on how to enable Xdebug for PHP.
|
| Documentation is available online as well:
| - A list of all settings: http://xdebug.org/docs-settings.php
| - A list of all functions: http://xdebug.org/docs-functions.php
| - Profiling instructions: http://xdebug.org/docs-profiling2.php
| - Remote debugging: http://xdebug.org/docs-debugger.php
Добавляем указанные строчки в php.ini
zend_extension=/usr/lib/php5/20131226/xdebug.so
xdebug.remote_enable=on
[debug]
; Remote settings
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=8888
; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=
; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32
; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32
Перезагружаем апач
/etc/init.d/apache2 restart
phpinfo() сообщает нам, что у нас установлена свежая версия xDebug 2.5.0
Окончательно NetBeans и настраиваем его на работу с отладчиком.
https://netbeans.org/kb/docs/php/debugging.html
Отладчик зависает в процессе запуска в NetBeans, причина похоже была в том, что php-fpm также слушает порт 9000, как и xDebug по умолчанию. Указал порт 8888, который согласно netstat был у меня свободен.
Также ставим плагин NetBeans Connector
Как бы все заработало, но выявился 1 нюанс. При трассировке при обращении к статическому свойству класса xDebug ругался на фатальную ошибку, спотыкаясь о мои синглтоны. Поиск подсказал, что это bug в php, который поправлен Дмитрием Стоговым
https://bugs.xdebug.org/view.php?id=1337 - derick
https://bugs.php.net/bug.php?id=73545 - решено dmitry@php.net
А так все хорошо начиналось.
Вариант 3(продолжение)
Нет худа без добра. Поскольку баг был в версии php5.6, а пофиксили его в php 7-ом, надо ставить php-семерку. Бэкпортов не нашлось, левые репы подключать не захотелось, попытка бэкпортировать нестабильный пакет в стабильную ветку почему-то не прокатила из-за ошибки(компилятор грязно заругался). Так, решено обновить дистрибутив на версию testing
sources.list меняем на
deb http://ftp.ru.debian.org/debian/ stretch main non-free contrib
deb-src http://ftp.ru.debian.org/debian/ stretch main non-free contrib
deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main
# jessie-updates, previously known as 'volatile'
deb http://ftp.ru.debian.org/debian/ stretch-updates main
deb-src http://ftp.ru.debian.org/debian/ stretch-updates main
aptitude update
aptitude upgrade
aptitude dist-upgrade
Далее отключаем модуль апача 5-ой версии php и включаем модуль 7-ой версии
a2dismod php5
a2enmod php7.0
Идем в конфигурационный файл 7-го php - /etc/php/7.0/apache2/php.ini
и вносим директивы для xDebug
[debug]
; Remote settings
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=8888
; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=
; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32
; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32
;netbeans
output_buffering=off
Сохраняем файлы, рестарт апача. Ура все заработало без досадных ошибок.
xdebug & nginx & php7.0-fpm - 504 Gateway Time-out при пошаговой отладке
При отладке в xdebug c сервером nginx через 75 сек. вылезало сообщение 504.
Побороть у меня получилось таким нижеследующими манипуляциями. Было установлено время 1000сек.
1) в конфигурации виртуального хоста прописываем (в контексте server!)
server {
...
fastcgi_read_timeout 1000; #xDebug
...
}
2) В файле конфигурации сервера CGI
/etc/php/7.0/fpm/pool.d/www.conf
вносим строчку:
request_terminate_timeout = 1000
3) В файле конфигурации php.ini
/etc/php/7.0/fpm/php.ini
;netbeans
output_buffering=off
;xDebug
max_execution_time=1000
Не забываем сделать рестарт nginx и сервера FastCGI
/etc/init.d/nginx restart
/etc/init.d/php7.0-fpm restart
Пути к конфигурационным файлам вашей версии php подскажет phpinfo().
xdebug - Cannot access self:: when no class scope is active
xdebug начал ругаться на меня, что не знаю php и выдавать ошибки сокета, предлагал создать лог-файл(xdebug.remote_log) и вообще было все плохо.
NetBeans->Сервис->Параметры->PHP->Отладка(Debugging)
"Наблюдения и оценка во всплывающем окне" - снимаем чекбокс, и все становится опять хорошо.