Drupal → Отладочные функции в Devel

28.02.2011

dpm($var) или dsm($var)

Выводит информацию о переменной в виде системного сообщения, используя Krumo.

dpm()/dsm()

dvm($var)

Выводит информацию о переменной в виде системного сообщения, используя var_dump($var).

dvm()

dpr($var, $return = false)

Выводит информацию о переменной вверху страницы, используя print_r($var, $return).

dpr()

dvr($var, $return = false)

Выводит информацию о переменной вверху страницы, используя var_dump($var, $return).

dvr()

kpr($var, $return = false)

Выводит информацию о переменной вверху страницы, используя Krumo.

kpr()

dargs()

Выводит информацию об аргументах текущей функции вверху страницы, используя Krumo.

dargs()

dd($var, $label = null)

Записывает информацию о переменной в файл drupal_debug.txt, который находится во временной директории (admin/settings/file-system).

ddebug_backtrace()

Выводит стек вызова функций вверху страницы, используя Krumo.

ddebug_backtrace()

db_queryd($query, $args = array())

Функция db_queryd(), это дебаг версия db_query(), которая после выполнения запроса $query, выводит его вверху страницы.

db_queryd()

dpq($query, $return = FALSE, $name = NULL)

Это аналог функции db_queryd() доступный только в Drupal 7. Выводит с помощью dpm() SQL запрос с подставленными аргументами. В качестве первого параметра принимает объект DBTNG.

Это краткий перевод статьи Debugging Drupal.

Похожие записи

Комментарии

function call stack - это стек вызова функций, устоявшееся.

Никогда не понимал, в чём удобство этих функций.
У меня свой отладочный класс - обертка для krumo, что бы можно было выводить дампы переменных через drupal_set_message.

Поэтому нет необходимости:

1. устанавливать на все сайты devel
Класс цепляется ко всем сайтам с помощью auto_prepend_file.

2. Запоминать названия новых функций (dpm, dvm, dpr, dvr и т.д.) и их различия.
Достаточно запомнить название класса (одна буква).

d::print_r($var);    // print_r() + drupal_set_message()
d::var_dump($var);   // var_dump() + drupal_set_message()
d::dump();           // dump() + drupal_set_message()

Все остальные krumo-функции по аналогии.

db_query для D6 тоже свою делал, с подсветкой SQL синтаксиса и отображением времени выполнения запроса. На D7 пока не нашел способа реализовать такое же.

1. устанавливать на все сайты devel

Devel это гораздо большее чем эти пяток функций. И ставить его ничем не сложнее своего велосипеда — drush dl devel + drush en devel -y. Плюс он будет работать на продакшене и любом другом месте, где стоит друпал.

Запоминать названия новых функций

мне например достаточно одной — dsm(), остальными я пользуюсь редко.

Devel это гораздо большее чем эти пяток функций.

Мне там интересен был только профайлер запросов, которого в 7-ке вроде уже нет.

И ставить его ничем не сложнее своего велосипеда — drush dl devel + drush en devel -y

Ага, только потом не забывать drush dis devel + drush uninstall devel, когда сайт переносится на продакшн.

ну это не страшно, там много что ещё нужно отключить, помимо devel-а

Vydrin_AP
30.08.2011, 12:26

Ага, только потом не забывать drush dis devel + drush uninstall devel, когда сайт переносится на продакшн.

Разве это небезопасно держать Devel не рабочем сайте? Просветите пожалуйста.

имея доступ к fullhtml наворотить можно всё что угодно и без devel/php :)

Alex Milkovsky
09.01.2013, 18:15

Супер,
могу еще добавить что в dpm($var) и dsm($var) есть 2й необязательный параметр name. Выводит надпись перед распечаткой переменной.

Я использую dpm(), поскольку dsm() в тупую вызывает dpm :) хотя dsm набрать на клавиатуре проще.

Дерек
19.09.2013, 16:12

а вы не подскажите как вызвать dsm(); на страницах чекаута в drupal commerce?

через hook_form_alter:

/**
 * Implements hook_form_alter().
 */
function MYMODULE_form_alter (&$form, &$form_state, $form_id) {

  // Commerce checkout form.
  if (strstr($form_id, 'commerce_checkout_form_') !== FALSE) {
    dpm($form_state);

    $checkout_page_id = $form_state['checkout_page']['page_id'];
    $panes = commerce_checkout_panes(array('enabled' => TRUE, 'page' => $checkout_page_id));
    dpm($panes);
  }
}

А что бы дебажить аякс запросы, есть предложения?

Только у меня реальные данные drupal_set_message отображает только после 2-го рефреша страницы?

А, понял, 2-ой параметр должен быть FALSE

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