Средства отладки

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Про удобную функция вывода значения переменной

#1 7 июня 2013 в 21:32
Здравствуйте!

Возможно это надо было публиковать в где-нибудь в блогах. Но я новичок в сообществе и пока не во всех правилах и устоях разобрался. Поэтому публикую здесь и буду благодарен за советы и рекомендации.

В maxSite CMS для удобства отладки имеется несколько функций. Хотел бы показать две, которые делают красивым отладочный вывод содержимого нужной переменной. Может плохо искал и в InstantCMS тоже есть нечто подобное. Но мне оказалось проще добавить в ядро эту функция и использовать так, как уже привык. Вот она:

  1.  
  2. # функция для отладки
  3. function pr($var, $html = false, $echo = true)
  4. {
  5. if (!$echo) ob_start();
  6. else echo '<pre>';
  7. if (is_bool($var))
  8. {
  9. if ($var) echo 'TRUE';
  10. else echo 'FALSE';
  11. }
  12. else
  13. {
  14. if ( is_scalar($var) )
  15. {
  16. if (!$html) echo $var;
  17. else
  18. {
  19. $var = str_replace('<br />', "<br>", $var);
  20. $var = str_replace('<br>', "<br>\n", $var);
  21. $var = str_replace('</p>', "</p>\n", $var);
  22. $var = str_replace('<ul>', "\n<ul>", $var);
  23. $var = str_replace('<li>', "\n<li>", $var);
  24. $var = htmlspecialchars($var);
  25. $var = wordwrap($var, 300);
  26. echo $var;
  27. }
  28. }
  29. else print_r ($var);
  30. }
  31. if (!$echo)
  32. {
  33. $out = ob_get_contents();
  34. return $out;
  35. }
  36. else echo '</pre>';
  37. }
  38.  
  39. # функция, аналогичная pr, только завершающаяся die()
  40. # используется для отладки с помощью прерывания
  41. function _pr($var, $html = false, $echo = true)
  42. {
  43. pr($var, $html, $echo);
  44. die();
  45. }
  46.  
Можно было бы привести скриншоты. Но думаю, что код очевиден и если кому-то близка проблема, то ему будет проще попробовать на практике и самому решить, что делать дальше с этим знанием. Лично я бы был рад, если бы в InstantCMS обнаружилось нечто подобное.
#2 7 июня 2013 в 21:54
Я в Инстанте такого не встречал, а отладкой занимаюсь так:
  1. echo'$имя_переменной = '; print_r($имя_переменной); echo'<br>';
Работает везде, правда на некоторых страницах, приходится комментировать строку вроде
  1. $inCore->redirect("/hunter/");
чтобы увидеть переменные или массивы, но после отладки эти отладочные строки все равно удаляются, чтобы не гадить в коде, а комментарии снимаются.
#3 7 июня 2013 в 23:09
Лучше всего настроить отладку в оболочке, в которой пишете. Я настроил phpDesigner в связке apache+php+phpdebug -
ставлю точку останова где-нибудь в компоненте, открываю в любом браузере сайт, при переходе на определенную страницу компонента происходит останов на нужной строке, далее можно отлаживать в пошаговом режиме, либо как вам это нравится.
Из плюсов — очень сильно ускоряет процесс разработки.
Из минусов — небольшие сложности в настройке 😊
#4 16 мая 2021 в 12:55
Добрый день всем!

Прошло прилично времени с первого моего сообщения. Я немного отвлекался от движка, но сейчас планирую снова начать его использование и хотел бы обновить сведения по обозначенной теме — в движке появились похожий инструмент или стоит заморочиться написанием своего компонента (попытаться предложить добавить фичу в существующие компоненты отладки)?
#5 16 мая 2021 в 13:10
vimruler,
Тут почитайте:
/forum/thread33525-1.html
И тут:
/blogs/allright/-rasshirenaja-otladka-dlja-instantcms-2-14-1-v-14-1-0.html
#7 16 мая 2021 в 13:27

Тут почитайте:
/forum/thread33525-1.html

Ris

Благодарю! Нашёл по ссылке упоминание наличия в движке стандартной функции dump() из \system\libs\strings.helper.php:

  1.  
  2. /**
  3.  * Выводит переменную рекурсивно
  4.  * Используется для отладки
  5.  *
  6.  * @param mixed $var
  7.  * @param boolean $halt
  8. */
  9. function dump($var, $halt = true) {
  10. echo '<pre>';
  11. print_r($var);
  12. echo '</pre>';
  13. if ($halt) { die(); }
  14. }
  15.  
Эта функция чем-то похожа на упомянутые мной. Только длиннее название и нет варианта с прерыванием работы движка. Если длина функции ещё дело привычки, то прерывание работы — бывает очень полезным. Подозреваю, что разработчики и так завалены работой чтобы отвлекать их на такую "фичу". А вы как думаете, стоило бы отправить предложение сделать функцию типа _dump() с возможностью прерывать работу движка?
#8 16 мая 2021 в 14:15

А вы как думаете, стоило бы отправить предложение сделать функцию типа _dump() с возможностью прерывать работу движка?

vimruler
Нет.
#9 16 мая 2021 в 14:43
vimruler, вы пробовали использовать dump?
там по умолчанию вызовется die() в конце.
#10 16 мая 2021 в 14:55

там по умолчанию вызовется die() в конце.

Zau4man

Семён Семёныч! Не заметил! facepalmБлагодарю!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.