Skip to content
andyceo edited this page Oct 13, 2023 · 1 revision

Описание параметров конфигурации XDebug 2.5.0

  • xdebug.max_nesting_level Ограничивает рекурсию до указанной глубины вложенных вызовов, по достижении порогового значения принудительно завершает приложение. Начальная активизация main() для запуска программы считается первым фреймом. Пример: xdebug.max_nesting_level=50

  • xdebug.remote_host Хост, на котором работает xdebug-клиент. Игнорируется, если задан параметр xdebug.remote_connect_back

  • xdebug.remote_connect_back Если этот параметр включен, параметр xdebug.remote_host игнорируется, а Xdebug пытается подключиться к клиенту, выполнившему HTTP-запрос. Он проверяет переменные $_SERVER['HTTP_X_FORWARDED_FOR'] и $_SERVER['REMOTE_ADDR'], чтобы узнать, какой IP-адрес использовать.

    Если сконфигурирован xdebug.remote_addr_header, переменная $SERVER с заданным именем будет проверена перед переменными $_SERVER['HTTP_X_FORWARDED_FOR'] и $_SERVER['REMOTE_ADDR']. Этот параметр не применяется для отладки через CLI, так как переменные заголовка $SERVER недоступны.

    Обратите внимание, что фильтр недоступен, и любой, кто может подключиться к веб-серверу, сможет начать сеанс отладки, даже если его адрес не соответствует xdebug.remote_host.

  • xdebug.remote_port Порт, к которому Xdebug пытается подключиться на удаленном хосте. Порт 9000 по умолчанию используется как для клиента, так и для связанного с ним debugclient. Так как многие клиенты используют этот номер порта, лучше оставить этот параметр без изменений.

Удаленная отладка за NAT с помощью проброса портов через SSH, используя PhpStorm

Здесь говорится о том, как запустить отладку на сервере, на который есть ssh-доступ, и установлен php и xdebug.

  1. Пробросим удаленный порт на локальный:

     ssh -R 9000:localhost:9000 example
    

    Мы открываем порт 9000 (первые 9000 в указанной команде) на удаленном сервере (example) (этот порт будет слушать sshd) на интерфейсе localhost (по умолчанию). Все соединения на этот порт будут слушаться sshd и перенаправляться на порт 9000 (вторые 9000 в указанной команде) на интерфейс localhost (localhost в указанной команде) той машины, с которой мы запустили эту команду.

  2. Настроим xdebug на сервере так, чтобы он при отладке соединялся с localhost:9000:

     xdebug.remote_enable=1
     xdebug.remote_handler=dbgp
     xdebug.remote_mode=req
     xdebug.remote_connect_back=0
     xdebug.remote_host=localhost
     xdebug.remote_port=9000
    
  3. На рабочей машине (на которой установлен PhpStorm и выполнена команда проброса порта из п.1) запустим PhpStorm и включим слушание 9000-го порта. Все, отладкой можно пользоваться. Заметим лишь, что при данном пробросе портов, настройка PhpStorm ничем не будет отличаться от настройки при локальной отладке, когда php установлен там же, где и сам PhpStorm.

Если все-таки не работает XDebug :)

... то можно вставить такой сниппет для получения стека вызовов:

$bt = debug_backtrace();
echo "<pre>";
foreach ($bt as $k => $v) {
    echo $k . ' : ';
    foreach (array_keys($v) as $v2) {
        echo $v2 . ' ';
        if (in_array($v2, ['function', 'class', 'type'])) {
            echo $v[$v2];
        }
    }
    echo "\n";
}
echo "</pre>";
die;

Ссылки

Sidebar is under construction

Clone this wiki locally