AVC>>По моим наблюдениям, пошаговый отладчик — всего лишь способ убить рабочее время с умным видом.
IT>Несчастный, как же ты вообще работаешь?
Я уже как-то тут делился наблюдением, что после перехода на C# стал частенько использовать пошаговый отладчик. В С++ все-равно много в отладчике не посмотришь при всем желании. Внутренности построенного шаблонного функтора ничего не скажут, тем более ничего не скажет полученный бог весть откуда интерфейс. ИНОГДА используем отладочный вывод/печать, по-сути та же пошаговая отладка, только в профиль.
К тому же в этой сильной статической типизации С++ больше уверенности, т.е. если уж получил коллекцию, где элементы по значению сидят, то можно даже не сомневаться в содержимом коллекции.
Здравствуйте, IT, Вы писали:
IT> Я по настоящему научился пользоваться отладчиком, когда после трёхдневных поисков одного бага и исчерпав все возможные асёрты, понял, что хватит страдать фигнёй и пора учиться пользоваться нормальными инструментами. Мне тогда было лет 25, я был невероятно крут и рассуждал примерно так же. Любую багу я мог попросту загонять голыми руками, что называется перебегать. Рано или поздно она сдавалась, шансов у неё не было. Но только не у ТОЙ. ТА бага меня победила. Победила в рукопашном бою. После этого я почесал репу, потратил немного времени на изучение отладчика и словил её родимую как миленькую. С тех пор я пользуюсь только хорошими и проверенными инструментами.
Если не секрет, в каком году это было?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
IT>Без проблем. Вот один неочевидный код. Переписывай.
Так и знал, что по ссылке гора еммита
Согласен, на ассемблере без дебага — ну никак вообще... В свое время я вдоволь намурыжил fd48/fd50... Альтернативой программным эмуляторам процессоров было выводить импульсы на свободные ножки портов.. Это вроде за отладочную печать сходило
Здравствуйте, vdimas, Вы писали:
IT>>Без проблем. Вот один неочевидный код. Переписывай.
V>Так и знал, что по ссылке гора еммита
Ну так а больше ничего интересного в управляемых средах и не придумать
V>Согласен, на ассемблере без дебага — ну никак вообще...
Не только на ассемблере. Сейчас приходится ковыряться в кишочках компилятора Nemerle, так там без отладчика, а именно без кнопки Watch делать нечего. Изучить полностью работу компилятора, а потом взять и всё написать — это утопия. Печатать всё в output, так сначала надо знать что печатать. Ставить асёрты, гы-гы, к чему это я? А вот поползать в отладчике по изучаемой структуре самое оно. Быстро, удобно, наглядно.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
E>>Если не секрет, в каком году это было?
IT>Точно не помню, где-то между 92-м и 94-м. Borland C++, inline assembler, push в начале метода, pop в конце, return посередине
Я как раз в это время начал сталкиваться со случаями, когда отладчик не помогал в отладке. А до этого пошаговый трейс в Turbo Pascal/Turbo C/Turbo Debugger, штук десять переменных в окне Watch, окошко Evaluate на каждый чих. Иногда доходило вообще до смешного -- в первый раз на исполнение программа сразу под отладчиком запускалась
Так что у меня другая история -- от отладчика к отладочным печатям.
Сейчас запускаю отладчик раз в месяц, если какой-то Access Violation нужно быстренько обнаружить. А уж когда последний раз пошаговую отладку запускал, так вообще не вспомню.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
IT>>А если код не твой или давно это было? Нужно по стеку побродить, посмотреть как оно куда чего.
FDS>Ужас! Вы меня разочаровываете... неужели вы и вправду изучаете чужой код в отладчике? И помогает?
Я изучаю чужой код в отладчике и при этом ничуть этого не стыжусь.
Возможно если есть идеальный, достаточно сложный и объймный код, документированный и с кучей документации, который можно изучить без отладчика, на предмет внеснеиня фич, или устранения багов. Но это сродни вопросу про серебрянную(золотую титановую) пулю.
Моя реальность такова, что код писался какими-то полуграмотныит программистами в далеком 1998 в не менее далекой канаде, и по нему нет ничего кроме кода, закзчика и тучи клиентов. И вот что я Вам скажу, в отладчике гораздо проще понять что, когда, откуда и почему.
Возможно если программа чисто прикладная без работы со всякого рода "железками", то можно и без отладчика но в моём случае — это туева хуча контроллеров. Наверное и со всеми контроллерами можно разобраться, если они работают адекватно, и по ним есть документация, но, как Вы уже поняли, в моем случае это не так
Так что, в моей реальной жизни рулит отладчик.
ЗЫ Есть подозрение что для написание идеальной программы нужно дышать идеальным газом. Но увы и ах..
V>>Так и знал, что по ссылке гора еммита
IT>Ну так а больше ничего интересного в управляемых средах и не придумать
В рамках твоей работы нижесказанное прозвучит как ересь, тем не менее:
— я очень склонен определять для кодогенерации место в случае BLT как post-build step
— если мы имеем кодогенерацию как часть разработки, то с тем же успехом можно было генерить код в виде исходника на читабельном языке, ну а затем — один из мн-ва путей, начиная от интеграции tool+designer+VS2005+partial_classes, до генерации и компиляции исходников во временной директории с последующим уничтожением после получения бинарника.
В общем, мне оно так с самого начала показалось , (когда-то постил предложения по этому поводу).
V>>Согласен, на ассемблере без дебага — ну никак вообще...
IT>Не только на ассемблере. Сейчас приходится ковыряться в кишочках компилятора Nemerle, так там без отладчика, а именно без кнопки Watch делать нечего.
Вернее, не столько в кишочках самого компилятора ради академического интереса, сколько для контроля того, как твое некое расширение внутри компилятора себя чувствует, правильно? Тут я полностью согласен, именно пошагово и именно много я в дотнете отлаживал свои компоненты, когда они должны были работать в уже готовом довольно-таки сложном окружении. Что характерно, при работе в дотнете не меньше половины подобного кода.
IT>Изучить полностью работу компилятора, а потом взять и всё написать — это утопия. Печатать всё в output, так сначала надо знать что печатать. Ставить асёрты, гы-гы, к чему это я? А вот поползать в отладчике по изучаемой структуре самое оно. Быстро, удобно, наглядно.
Да все понятно. Собственно, все мы стараемся без фанатизма. Если не участвовать в "Философии" а смотреть со стороны, то замечаешь интересный эффект: стоит кому-нить из оппонентов проявить твердость и фанатизм, как вирус непокобелимости и твордости взглядов мгновенно перекидывается на оппонентов... В смысле, ты же сам однажды верно подметил, что некоторые вещи принципиально нереально в пошаговом режиме отлаживать. Например, критичный ассинхронный обмен (отладка в основном путем анализа отладочного лога), или же — пресловутые lazy-initialized св-ва, которые могут даже подвесить дебаггер студии при удачном раскладе (отладка — в основном на юнит-тестах).
В общем, как и 99% всех споров в "Философии" этот можно заканчивать банальным: "всё хорошо, если в меру и к месту".