Отладка скрипта

При отладке скрипта я использую

  • Дедовские методы: команды echo, print_r

    Голосов: 130 75,1%
  • Отладочные скрипты и классы

    Голосов: 7 4,0%
  • Отладочный Порт

    Голосов: 0 0,0%
  • PHPEdit

    Голосов: 6 3,5%
  • Zend Studio

    Голосов: 14 8,1%
  • что-то иное (написать)

    Голосов: 6 3,5%
  • xdebug

    Голосов: 5 2,9%
  • DBG

    Голосов: 5 2,9%
  • ADP

    Голосов: 0 0,0%

  • Всего проголосовало
    173

Oleg Marchuk

Человек
Автор оригинала: Scarab
Оно не то, чтобы надежнее - оно проще.
Даже когда есть дебажный класс - то тыкать в каждое место
PHP:
$debug->Message(D_SQL, $sql_statement);
ты не станешь.
А определить функцию с коротким названием, чтобы использовать этот класс?
PHP:
function dd($msg) {
...
    $debug->Message($msg);
}
 

Kaa

Guest
да все как-то по старинке - echo в ключевых местах... да и то редко приходится... код просто пишу аккуратно...
 

Ustas

Guest
у меня есть специальный скипт для тестирования модулей. в специальную папочку tests/ я складываю по мере написания модулей специальные файлы с расширением .test, в которых описывается:
1) какой модуль подключать для тестирования;
2) затем идет список вызовов методов и функций модуля с различными наборами параметров, моделирующими все возможные "граничные значения" (если такое понятие вообще применимо для php); тут же эти методы и функции вызываются с неверным количеством параметров, неверными типами параметров и т.п.
3) потом идет собственно описание процедуры тестирования; оно представляет собой набор строк вида:
<номер вызова>:<описание действия>:<одидаемый результат: 0 или 1>:<список переменных, которые нужно вывести после вызова (через запятую)>:<действия, выполняемое до вызова>:<действия, выполняемое после вызова>

Любой из последних 3 параметров указывать не обязательно. Действия - это блоки кода, которым назначается номер; они хранятся в отдельном файле с расширением .actions (его может и не быть). Короче это выглядит например так:
PHP:
@1
// имитируем отсутствие значения
$tmp = $some_test_var;
unset($some_test_var);
@2
// Воcстанавливаем исходное значение
$some_test_var = $tmp;
И в описании процедуры будет такая запись:
PHP:
[1]:Описание действия:1:$result:@1:@2
a описание вызова будет выглядеть так:
PHP:
[1]:$some_object->some_method($some_test_var);
Вообщем, это позволяет быстро прогонять тест для каждого из модулей после внесений небольших изменений, и контролировать совпадение ожидаемых результатов теста с полученными. Методология XP, понимаешь.. :) Хотя прога сырая - написана буквально за 2-3 часа..
 

HEm

Сетевой бобер
кстати, насчет методологии XP применительно к PHP, а именно насчет тестирования - есть еще какие способы?
 

Ustas

Guest
Ну тут методолгия XP в чистом виде не может применяться, например, из-за того, что использование понятия "интеграция проекта" в php абсурдно - проект на надо собирать... С одной стороны это хорошо, а с другой не очень-то способствует сосредоточению на какой-то конкретной задаче.

Кстати, у меня есть еще модуль exceptions.inc, который отлавливает все исключения (ох, коряво это сделано в php; когда уже try\catch будет?..), записывает в лог, отсылает уведомления админу и пользователю выкидывает алерт с предупреждением, что информация на странице может быть не польной или искажена. Если исключение фатальное, то пользователь перенеаправяется на страницу с сообщением типа: "извините, сервис временно не доступен.." и т.п. Кроме того, есть опция debug_mode=on (можно передавать и get'ом и post'ом). Если она включена, то уведомления не отсылаются, в лог ничего не пишется, а вместо предупреждений пишутся все сообщений об ошибках.. Минус: по сообщениям без трейса трудно судить откуда вызывался метод в котором возникло исключение.
 

young

Новичок
Пару вопросов по DBG
Забористая штука, отсыпь!

P.S. Бесплатная версия замечательно скачивается и замечательно с 4.3.x работает
Скачалась, поставилась, phpinfo сказал, что он с ней дружит, listener запустился, а вот debug информации никакой не видно :)

Подскажите, что надо сделать, что бы ее увидеть?
 

Slax

Guest
А я незнал как проголосовать...
Обычно когда есть ошибки, тогда либо страница не загружается и появляется сообщение что есть ошибка, либо страница загружается а там куча текста с описанием ошибки... я не знаю как назвать этот тип отладки... стандартный наверное, но такого нет вот я и проголосовал за отладочный порт... только после результатов понял, что это наверное не то что я предпологал...
Если кто-то знает что это объясните пожалуйста....
 

yUAC

Guest
А я вообще великий и ужасный - у меня даже при error_reporting(E_ALL) ничего не выдается :)

В чем секрет - я всегда пишу с error_reporting(E_ALL) и register_globals off - на самом-то деле это даже удобнее чем это же в значении on, просто надо привыкнуть... Ну и взломать такой скрипт будет на порядок сложнее...

Так как если даже мелкая ошибка возникнет, она у меня отобразится, я либо поставлю в этом месте @, либо буду разбираться... Хотя чаще всего ошибка - это parse error :)))
 

RomikChef

Guest
Ты не великий и не ужасный.
был бы великий - писал бы при display_errors=off
а сейчас тебя поломать не сложнее, чем первоклассника, при всей твоей гордости за регистер глобалс
 

@leg

Guest
А я как правило наблдаю лишь парсе еррор! :))
Скорее всего потому что проекты не особо сложные...
Думаю и результаты голосования как раз говорят о том же -- для чего создавался и применяется ПХП.
Необходимость пользоваться деббагером говорит скорее всего о том, что ПХП применяется не по назначению. :)
 

Slax

Guest
Прочитав все мнения я понял, что лично мне дебаггеры не нужны - я не пишу чего-то особо сложного... И вообще мне кажется что на РНР особо больших и сложных скриптов почти не пишут и отладчик тут не так нужен, как, к примеру, в С++. С другой стороны очень трудно искать ошибки в чужих скриптах. Мне как-то нужен был форум и все которые я скачивал оказывались с ошибками... особо простые я исправлял а другие незнал как... :(
 

Ustas

Guest
А мне вот приходится корячиться с php - начальник говорит: "php пользуется много народа - значит, будем на нем писать"... проект сложный, и php здесь явно не самый лучший вариант
вот такая попа.. :(
 

yUAC

Guest
Автор оригинала: RomikChef
Ты не великий и не ужасный.
А это была шутка :rolleyes:
Ну так дело все в том, что я не только это применяю, у меня есть еще специальные методы - анти-ламер и анти-хакер... Анти-ламер - это если какой-нибудь юзер наберет случайно в форме ответа не то, что нужно, то в ответ он получит не сообщение об ошибке, а скрипт просто его "проглотит"... Анти-хакер - это если какой-нибудь хакер попытается открыть passwords.dat или наберет кучу тэгов и спецсимволов в сообщении...
 

Verk

Guest
Про Анти-ламер и Анти-хакер это тоже шутки ? :)
 

yUAC

Guest
Не совсем. Но похоже на то... То есть что-то подобное у меня реализовано обычно...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Мораль

PHP community во всей своей красе. :D
"Я этим ни разу не пользовался, да и не умею" -> "мне это не нужно" :D
"Я делаю ЭТО стоя в гамаке на лыжах" -> "я крутой программист" :D

Не, я не предлагаю всем резко менять свои привычки, но вы подумайте, что быстрее и удобнее: нафаршировать скрипт многочисленными echo или же раз запустить его на пошаговое выполнение и посмотреть locals.

Является ли ненужная трата своего времени поводом для гордости?
 

az

Guest
комплекс echo, & старенький DBGsetup210win32.msi, неплохо работает...;)) стественно, не забывая выставить ERR_ALL...
 

Alexandre

PHPПенсионер
php пользуется много народа - значит, будем на нем писать
он начальник - ты дуракэто не оскорбление а пословица
Писать надо на том, что дает максимальный эффект (быстрота создания программы, память, время...)
ну и возможности конечно...
 

Oleg Marchuk

Человек
Re: Мораль

Автор оригинала: Sad Spirit
вы подумайте, что быстрее и удобнее: нафаршировать скрипт многочисленными echo или же раз запустить его на пошаговое выполнение и посмотреть locals.

Является ли ненужная трата своего времени поводом для гордости?
Тут еще не понятно, что будет быстрее :D.

Zend Studio не всегда пошагово (или даже по "выполнять до положения курсора") доходит до места, которое тебе нужно отловить - АПАЧ падает. Да и сам по себе тормозит. Пока узнаешь значение переменной - можно повесится. При том при всем, что отлаживаю я на локальной машине.
 

Alexandre

PHPПенсионер
ИТОГО
----------

лично я (и не только я) открыл для себя много нового
 
Сверху