Установка Xdebug

В принципе, весь процесс описан в официальной документации тут.

cd /tmp/
git clone git://github.com/xdebug/xdebug.git
cd xdebug
sudo ./rebuild.sh

Я столкнулся с двумя проблемами: версия PHP5 больше не поддерживается и не было команды phpize.

Обновляем PHP5 до PHP7

Удаляем старую версию PHP5 через sudo apt purge php5 с зачисткой остальных php-пакетов (список можно посмотреть через sudo dpkg -l php\*).

Мне также потребовалось сделать это:

sudo apt purge php-pear php5-cli php5-common php5-curl php5-dev php5-gd php5-mysql

Репозиторий PHP7 отсутствовал на Ubuntu 14.04 (sudo apt search php7), но должен быть в новых версиях. Если репо нет, то sudo add-apt-repository ppa:ondrej/php и sudo apt update && sudo apt upgrade. Дальше ставим PHP7 и другие пакеты по вкусу из репо:

sudo apt install php7.3 php7.3-common php7.3-tidy php7.3-xml php7.3-mysql php7.3-mbstring php7.3-curl

Добавляем phpize

Тут все просто:

sudo apt install php7.3-dev

Теперь sudo ./rebuild.sh выполняется с успехом. Последняя строчка рекомендует запустить sudo make test - будут проведены тесты на исправленные баги.

Добавляем в конфиг

Я работаю с консольным вариантом, для апача процедура аналогичная, но ее нужно сделать в другом конфиге.

Идем в каталог конфигов: cd /etc/php/7.3/cli/conf.d и наблюдаем список установленных расширений: ls -la. Весь каталог состоит из симлинков:

10-mysqlnd.ini -> /etc/php/7.3/mods-available/mysqlnd.ini
10-opcache.ini -> /etc/php/7.3/mods-available/opcache.ini
...

Я просто добавил туда файл sudo vim 10-xdebug.ini:

/etc/php/7.3/cli/conf.d/10-xdebug.ini
; configuration for Xdebug
zend_extension=xdebug.so

Проверяем Xdebug

php -v

выводит

PHP 7.3.0RC2 (cli) (built: Oct  1 2018 13:18:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.0RC2, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.7.0beta1, Copyright (c) 2002-2018, by Derick Rethans

Запускаем простой пример на PHP сразу из командой строки:

php -r '$a = "new string"; xdebug_debug_zval("a");'

выводит

a: (refcount=1, is_ref=0)='new string'