Отладка ajax запросов в Drupal через XDebug

Производить отладку через XDebug очень легко - стоит лишь добавить определенную строчку типа ?XDEBUG_SESSION_START=15137 к адресу запроса, и мы можем ставить breakpoint'ы в нужных местах кода чтобы посмотреть значение переменных. Однако что же делать, если на странице вызывается какой-то ajax-скрипт (например, при нажатии на кнопку), и в нём почему-то не срабатывают выставленные breakpoint'ы? Всё дело в том, что к ajax-запросам не добавляется нужной нам переменной XDEBUG_SESSION_START, и наш сервер просто не знает, что нужно останавливаться.
Для решения этой проблемы я пошёл прямым путём - нужно просто открыть js-файл друпаловского ядра misc/ajax.js, найти строчку 98 и изменить её примерно следующим образом:

Drupal.ajax = function (base, element, element_settings) {
  var defaults = {
    url: 'system/ajax?XDEBUG_SESSION_START=15137',

т.е. напрямую добавить вызов xdebug ко всем ajax-вызовам друпала. И это работает! Не забудьте после нахождения бага вернуть всё как было, хаки ядра - плохая штука!
После остановки скрипта на breakpoint'е в нужном месте очень полезно посмотреть стек вызовов, обычно в него вклинивается какая-то кастомная функция, которая портит всё дело.

Удачи!

Drupal 7

Комментарии

Добавить комментарий