зачастую в процессе отладки бывает необходимо сделать дамп какой-нибудь переменной, чтобы проверить чему же она всё-таки равна. в php есть стандартные функции для этого дела: var_dump и print_r, у которых есть три беды: 1. вставка их вывода в html режет всё их форматирование и в итоге разобрать где что очень сложно. эту проблему обычно решают обрамлением тегами <pre>, а чтобы не писать их каждый раз пишуть функцию-враппер. 2. в случае больших массивов бывает сложно найти нужное место, потому как следующий элемент массива будет находиться после всех детей предыдущего. то есть они выводят сразу всё, а не только то, что необходимо. 3. если вы вставили куда-то вывод переменной, потом отошли на годик другой, вернулись и обнаружили что забыли убрать дамп - бывает довольно сложно найти то место, куда он был вставлен. в связи с этим я написал функцию дампа в html файл. посмотреть функцию в действии и сравнить с конкурентами можно здесь: http://dark-demon.jino-net.ru/dumptest/ там же можно скачать тестовый пакет. чтобы также красиво всё отображалось и флип-флопилось, нужно подключить к выводимой страничке скрипт main.js и стиль main.css, либо интегрировать их в ваши скрипты и стили. в общем, смотрите index.php - там всё предельно ясно. вызывать функцию элементарно: Код (Text): vardump($a); или с указанием имени: Код (Text): vardump($a,'$a'); с интересом выслушаю предложения и пожелания. в последней версии добавлено: - совместимость с IE - отлов рекурсии - линки на автораскрытие ветвей (висят на именах переменных) - даблклик раскрывает все дочерние ветви, кроме скрытых - скрытые ветви на интах, картинках и потоках с дополнительной информацией.
dark-demon неплохая идея но есть большой касяк: Когда делаешь дамп часто делаешь параллельно - правку строчки F5, правку строчки F5 правку строчки F5. Если тебе надо смотреть на значение где нибудь на 4-м уровне то замаешься каждый раз отщелкивать все. То есть нужно сохранять какие ветви были раскрыты, чтобы после рефреша они опять оказались раскрытыми. Второй касяк - это Ctrl+F не будет работать. То есть поиск возможен только визуальный - это тоже не есть гуд. Поле чтоли добавить для поиска. Хотя это уже конечно придирка . Но первый пункт на мой взгляд просто обязателен. p.s. выделяй код тегами [ php ] <? ?> [/php], а вообще молодец
1. надо подумать... 2. поиск работает, но только по открытым веткам. иногда это удобно. хотя, наверно, можно прикрутить кнопочку "развернуть всё дерево"...
это итак понятно . И удобно это всегда когда просматриваешь боьшие массивы данных с большим разбросом этих самых данных. Если приделывать кнопку то наверное она должны быть поверх всего всегда доступна. Иначе не очень то она и нужна.
А я лично использую сфою функцию PHP: <? function _debug($var = 'no value', $die = false) { if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '192.168.0.1'))) { if ($var === true || $var === false){ echo $var === true ? 'true' : 'false'; if ($die) die(); return; } if (is_array($var) || is_object($var)){ echo '<pre>'.print_r($var, true).'</pre>'; if ($die) die(); return; } echo htmlspecialchars($var); if ($die) die(); return; } } ?> Если данных много, я просто вывожу ту часть, где у меня возможный глюк
пара камней в его огород: NULL распознаёт как пустую строку, при выводе не заменяет сущности, простую переменную (не объект, массив или ресурс) выводит без какого-либо оформления.
да, интересно... единственное, что не понравилось - это "заморочка" с шаблонами, из-за этого тяжело использовать данную разработку. всё-таки автор для себя писал. а лично я предпочитаю print_r
нет там никаких заморочек... просто положить все шаблоны в папку out в папке со скриптом... сегодня выложу всё одним архивом...
я не просто так в кавычки это слово взял. отладочная функция, зачем вообще шаблоны. хотя, на вкус на цвет, как говорится 8)
PHP: <?php echo '<pre>'.print_r($variable, true).'</pre>'; ?> И ненадо никаких шаблонов. Удобно и легко читаеться. Прикручивать ещё какие-то шаблоны и классы для дебага... ужос на! Представляю всю эту колбасню раскрашенную в небольшой ячейке таблицы которая в центре сайта где-нить
1. не только для дебага. сей "шаблонизатор" - продвинутая замена обычному инклуду. 2. один раз прикрутить, чтобы потом на всю жизнь забыть про недоразумение print_r, - не такая уж и большая цена. представляю как её разопрёт от <pre>... кроме <pre> тебе ещё нужно юзать htmlspecialchars, чтобы отображалость то, что в строке, а не то, как это выводится в браузере. да и вообще, информативность у print_r крайне низкая.
кстати, vardump благодаря нейтральным цветам замечательно подходит к любому дизайну, в отличие от аляповатого dBug :-]
ну вот и выбирай, либо править CSS, либо прокручивать темплейты Кстати, автор dBug сказал, что поправил основные отмеченные мной баги - рекомендую обновить.
Поправил, да не все. Варнинги всё ещё появляются и замены на html-сущности так и не происходит... Обновил сабж - теперь тестовый пакет можно скачать одним архивом.
Всегда хватало print_r, выыод читался безо всякого pre простым view_source, нужное место искалось поиском, и забывать убрать print_r после отладки как-то не удавалось забыть - на рабочем месте не бухаем, но даже если и забыли, grep найдет все, что нужно. Чорт, неужели я опять что-то делаю не так? ;(
ключевое слово - "искалось" в нескольких тяжёлых дампах приходится усердно искать нужные данные. и при рефреше - всё по новой. для этого не обязательно бухать - можно просто отвлечь. могу поспорить он найдёт ещё и кучу строк типа: Код (Text): #var_dump($myvariable); впрочем, не в этом основная причина - иметь трейсдамп полезно, чтобы можно было тут же посмотреть с какими параметрами была вызвана функция и откуда. не знаю как тебе, а мне в таких случаях удобнее щёлкнуть пару раз мышью, чем переключаться на редактор, добавлять трейсдамп, закачивать на сервер и переключаться обратно. или другой пример: делаешь дамп массива одно из полей которого содержит таймстемп. чтобы узнать дату тебе нужно лезть в сорц и добавлять отдельный вывод для этого таймстемпа. мне же для этого достаточно одного щелчка мышью.
Небольшой оффтоп: Интересно, а можно ли как-нибудь в PHP (под локальной сборкой) узнать состояние клавиатуры? Scroll Lock включен - сайт работает в режиме отладки, выключен - все как обычно, а на продуктиве данная функция себя вообще никак не проявляет Удобно ведь
Продолжение небольшого оффтопа: Чисто теоретически можно написать модуль для PHP, который получает состояние клавиатуры сервера. Но зачем? Проще в конфиге задавать уровень отладки (именно так я и делаю). А scroll lock у меня индикатор раскладки клавиатуры: не надо его трогать
Тож оффтоп Видел класс на PHP через COM обьект выдвигал лоток привода на серваке. ^_^ LOL =) Я предпочел Caps - все равно не пользуюсь, и под рукой ближе.
наткнулся тут на интересное решение: http://www.firephp.org/Demo/ если в кратце, то оно использует http-заголовки для передачи данных, а специальное расширение для расширения для браузера написанного на движке мозилла смотрит эти заголовки и выводит в специальной панельке.