цитата :: программисты не используют дебаггеры из-за сложности
я в шоке : )
« The complexity and overhead of using a debugger isn’t unique to Venkman; nearly every IDE (Integrated Development Enivronment) includes some sort of debugger, but these are often ignored by developers due to the amount of effort that must be expended to actually use the debugger and step through their code. » друзья-программисты, есть среди вас те, кто именно так относится к дебаггеру?
комментарии
pha:
несколько лет не пользуюсь дебагером
_arty:
программируешь при этом?
pha:
да. причем совсем недавно начал пользоваться komodo, в котором пишу только php код. всё остальное в фаре. в komodo есть дебагер, но я всё равно им не пользуюсь - неудобно
_arty:
а код пишешь без ошибок?
если с ошибками, то как с ними борешься?
pha:
в перле - warn
в php - print_r или var_dump
в javascript - alert
_arty:
а ты классы используешь? много их у тебя?
pha:
в старом перловом двигле около 40 классов (я на нём диплом делал, правда в дипломе их было несколько меньше).
в интерфейсе, который я сейчас делаю на работе на php - где-то десяток
_arty:
угу
и что, не бывает ситуаций, когда ошибка в каком-то запросе к БД, причём всплывает она в функции уровня общения с БД, которая используется раз десять-пятнадцать при загрузке одной страницы?
pha:
ну и что?
_arty:
если ты в ней заюзаешь какой-нибудь print_r, придётся потом разгребать огромное полотенце
pha:
что мне мешает написать if (условие при котором глюк) print_r
_arty:
а откуда ты его знаешь, это условие?
pha:
тогда разбирать простыню
_arty:
не, это как-то неправильно
pha:
чем же это не правильно, юноша-скриптун?
_arty:
а хотя бы нулевой интерактивностью
pha:
опять же, вот у ты трейсишь прогу, поставил брейк поинт, допустим, и нажмаешь F9-F9-F9 (или чего там в в твоей идешке заставляет прогу бежать дальше), посматриваешь на watches и тут -- бац! -- по инерции перепрыгнул ситуацию в которой был глюк. и всё сначала.
а когда у тебя простыня (т.е. лог) ты спокойно её анализируешь...
_arty:
в первый запуск ты отлавливаешь точку, в которой происходит сбой
во второй запуск ты подходишь к этой точке, и внимательно её исследуешь, смотришь, что там в переменных, какие условия выполняются, и т.п.
md_x:
пишу без ошибок :-))))))
когда очень надо, то var_dump(), print_r(), echo вполне хватает.
_arty:
а ты классы используешь? много их у тебя?
md_x:
и классы тоже.
их есть, не то шоб много, но хватает.
в отладке всегда один конкретный метод .. прогоняю/вылизываю, потом смотрю дальше.
_arty:
угу
а если один метод, унаследованный через пару поколений, начинает поглюкивать? и при этом он вызывается десяток раз при одном запуске, и членов-переменных десятки.
md_x:
а какая разница .. он то все равно один. :-)
вообщем, честно сказать, еще не столкнулся с ситуацией когда бы мне стало нехватать стандартных средств.
oslikovod:
для жабовских поделок с помощью эклипса практически достаточно, чтобы он ни на что не ругался, тогда с очень большой вероятностью программа работает правильно, в остальных случаях используется как силовая отладка (трэйс, вывод интересующих значений в определенных точках), так и отладчик (условные точки останова, пошаговое выполнение)
с жабаскриптом сложнее, хорошего отладчика для него пока действительно не придумали, логов не всегда достаточно чтобы понять почему сценарий работает не так, как ожидается, хотя среда, в которой кроме подсветки есть хоть какие-то зачатки проверки синтаксиса и семантики значительно упрощает получение правильно работающего кода
pha:
а если говорить серьезно, то дебагер - это навязанная парадигма отладки программ. навязанная самими разработчиками x86 - есть прерывание, вызваемое после каждой инструкции. обычно вектор этого прерывания пуст, но дебагер вешает свой обработчик.
всё же, это не единственный удобный способ отлаживать программы. опен ё маинд.
_arty:
я знаю, что когда я отлаживаю работу класса с 20-30 переменными-членами, изучать простыню очень неудобно. Я знаю, потому что пробовал.
pha:
мамочки, я ж тоже не голословен!
_arty:
я верю
расскажи, как ты делаешь это полотенце, может ты какие особые приёмы для него используешь, благодаря которым изучать его становится удобно. Например, как ты определяешь, которую переменную выводить?
pha:
да как-то вот много переменных не бывает. может это уже вопрос архитекруты или наития, но вот, реально, нет у меня такой проблемы!
_arty:
хм
а вот в гидре меньше десяти - редкость
и я бы не сказал, что это проблема архитектуры - просто очень много свойств у субъекта учёта
pha:
это, блин, твоя простыня, и ты делаешь её удобной для себя, вобщем, да. ну и вообще, задачи то у нас простые, а все сложные алгоритмы уже отлажены
_arty:
"простые задачи" может быть ключевой фразой
да, расскажи, как её делаешь удобной для себя? или print_r большого класса - это уже достаточно удобно?
pha:
так я просто не отвечу... есть отлаженные объекты: генератор форм, планировщик типов, автоджоин... они делают за меня основную работу
rageous:
на работе только основного кода около 2000 файлов (без вторичных библиотек, некоторые из которых тоже разработаны у нас, все из них так же порою глючат - даже безупречный буст и стл-порт).
потому всем приходящим к нам людям в первую очередь прививается искренняя любовь к дебаггеру, ибо без него просто невозможно порою отладить программу.
когда я на си програмил под никсы, то только логами пользовался, дебаггером не довелось - но там проги были простые.
вообще грамотный подход - это комплекное использование средств отладки и выбор средства в соответствии с характером ошибки. иногда дебаггер просто невозможно использовать, а иногда логи почти ничего не дают.
в общем, на вкус и цвет, конечно, но мне кажется, что грамотный программист на то и программист, чтобы уметь делать разумный выбор из доступных ему средств в зависимости от характера задачи.
_arty:
разумно
и неразумно обратное, например, отказ от дебаггера там, где он нужен
вот в той ситуации, которую мы обсуждаем с Фа, ты бы предпочёл искать нужное место - один ошибочный вызов - в полотенце или копаться в коде дебаггером?
rageous:
вообще у меня скорее всего там где-то ассерт вылетел
но раз лог и дебаггер, то я сначала бы глянул в лог, чтобы убедиться, что по нему нельзя с ходу ничего понять про эту функцию, а потом поставил брейк на ее входе и смотрел ее построчно до тех пор, пока не обнаружил бы ошибку или ее следы
oslikovod:
дебаггеры нас кормят :)
_arty:
и они тоже : )
mikevel:
Без дебагера жизнь свою не представляю... другое дело что он должен быть хорошим... в 6+ студии хороший дебаггер.
rageous:
интересные ссылки на тему дебага в рунете:
http://dtf.ru/articles/read.php?id=36376
http://dtf.ru/articles/read.php?id=36547