Почему я дебажу код
Мне довольно странно было было узнать, что много из моих друзей –кодеров практически не пользуются дебаггерами. «Крайний случай», говорят.
В определённый момент кодинга под z80 (в 90-х) я осознал, что для того, что бы писать код – нужно мыслить как процессор. Звучит конечно странно, но полностью осознать довольно простую, по сегодняшним меркам, логику выполнения команд процессора помогает именно отладка своих программ. Кроме того – ответ на вопрос «КАК ИМЕННО ЭТО СДЕЛАНО!?» может дать лишь отладчик.
Кодирую алгоритмы я небольшими частями, после этого всё компилируется и попадает в отладчик, где я прохожу по коду и анализирую выполнение кода – генерацию кода декранчером, пересчёты данных, выполнение блоков и т.д.
Почему? Потому что я уверен, что далеко не всё я могу в своей голове удержать, потому что проверка даёт уверенность в правильной генерации данных / кода / выполнения подпрограмм. Таким образом я УВЕРЕН, что написанные части работают именно так как хочу Я, а не проц.
Особенно это касается больших логических структур, где связан большой клубок связей, влияющих на много различных мест в программе.
В результате, дописав и отладив часть кода, я могу быть спокоен и отложить кодирование на следующий день – необходимое за сегодня сделано, завтра можно заниматься следующими частями программы, чем бы она не была.
Конечно, не обязательно использовать отладчик для «мёртвого кода» :), написанного вами тысячи раз. Но и на старуху бывает проруха – невнимательность, забывчивость, давно заброшенный код, который вы писали в другом состоянии и с другим опытом.
Прикол был, когда у ААА появились новые московские диски и он их считывал в trd. Читалось не всё, и некоторые демы он прислал мне, дабы я выяснил – работают ли они вообще. Замечательно, скажу я вам, было глянуть на BestDemo5, которая после старта выдавала бред на экран и сбрасывалась. Дема была круто по тогдашним меркам заксорена, но! После бреда на экране и «сброса» стояло ожидание нажатия на пробел :) И потом, естественно, демо запускалось :))
Для себя я использую отладчик Unreal, как очень похожий по управлению на любимый мною когда-то STS.
Дело ваше, конечно, голова большая :)
В определённый момент кодинга под z80 (в 90-х) я осознал, что для того, что бы писать код – нужно мыслить как процессор. Звучит конечно странно, но полностью осознать довольно простую, по сегодняшним меркам, логику выполнения команд процессора помогает именно отладка своих программ. Кроме того – ответ на вопрос «КАК ИМЕННО ЭТО СДЕЛАНО!?» может дать лишь отладчик.
Кодирую алгоритмы я небольшими частями, после этого всё компилируется и попадает в отладчик, где я прохожу по коду и анализирую выполнение кода – генерацию кода декранчером, пересчёты данных, выполнение блоков и т.д.
Почему? Потому что я уверен, что далеко не всё я могу в своей голове удержать, потому что проверка даёт уверенность в правильной генерации данных / кода / выполнения подпрограмм. Таким образом я УВЕРЕН, что написанные части работают именно так как хочу Я, а не проц.
Особенно это касается больших логических структур, где связан большой клубок связей, влияющих на много различных мест в программе.
В результате, дописав и отладив часть кода, я могу быть спокоен и отложить кодирование на следующий день – необходимое за сегодня сделано, завтра можно заниматься следующими частями программы, чем бы она не была.
Конечно, не обязательно использовать отладчик для «мёртвого кода» :), написанного вами тысячи раз. Но и на старуху бывает проруха – невнимательность, забывчивость, давно заброшенный код, который вы писали в другом состоянии и с другим опытом.
Прикол был, когда у ААА появились новые московские диски и он их считывал в trd. Читалось не всё, и некоторые демы он прислал мне, дабы я выяснил – работают ли они вообще. Замечательно, скажу я вам, было глянуть на BestDemo5, которая после старта выдавала бред на экран и сбрасывалась. Дема была круто по тогдашним меркам заксорена, но! После бреда на экране и «сброса» стояло ожидание нажатия на пробел :) И потом, естественно, демо запускалось :))
Для себя я использую отладчик Unreal, как очень похожий по управлению на любимый мною когда-то STS.
Дело ваше, конечно, голова большая :)
33 комментария
Хотя бывает всякое. Очень неприятный баг сидел в бетах In Memoriam VNN, случайные сбои неясной природы, ошибку нашёл в отладчике g0blinish, оказалось, что распаковщик портил IY, а т.к. он был сделан частью загрузчика, глядя на код ничего увидеть было нельзя (сам-то код начинался с DI: PUSH IY).
в результате обнаружил, что ayFX player огородил для себя мало памяти и запортил содержимое кода :) вылавливалось при воспроизведении звука :)
Но! когда игра стала со звуком! ООоооо))
1. запросто можно опечататься, либо же допустить другую мелкую (в т.ч. логическую) ошибку,
2. а главное, код нередко работает «случайно»! это очень стремный тип бага. т.е. ты проводишь эксперименты, все работает. а потом он внезапно начинает глючить… это всякие неиниц. переменные, обращения в чужую память и все такое. один внимательный проход дебаггером по всем веткам программы убирает большинство таких косяков.
почему этого не делать в уме/при написании — уже говорили, лень становиться процессором.
Реальные проблемы чаще всего бывает когда тыкаю в сырце символ случайно, но это бывает обычно уже после стадии проверки и любым способом плохо ловится (было пару раз).
А по поводу нужности данного процесса, пока ты колупаешь чисто свой код и постоянно в тонусе (то есть помнишь что, где и как писал) это всё замечательно. Но как только начинаешь что-то писать под «чужие» проекты, например плагин для WildCommader, то сразу понимаешь насколько у людей разное мышление, логика и сколько «сюрпризов» может преподнести скудная документация.
Ну уж про варианты когда после сборки монолоадера работа просто сбрасывается в определённый момент загрузки я уже молчу вообще :) Это сейчас хорошо можно делать SPG, паковать всё это дело mhmt и быть на 99.9% что всё запустится как надо. Но есть люди которые ещё до сих пор выпускают релизы в TRD и их не мало.
Код я дебажу иногда, когда после ассемблирования снапшота что-то не работает или работает криво. Для этого подходит отладчик Spectaculator. Единственный минус по сравнению с древним SDTS2.6 — экран обновляется после инта, а не сразу. Отладчик в унрыле — скорее всего атавизм, лучше бы подошел аналог из bgb — просмотр тайлов, карты тайлов и пспрайтов.
а в целом иногда отладка сводится к Атари, если привыкнуть, то отладчик из Altirra более удобен, чем в Atari800winplus.
Почему я дебажу код? потому что по невнимательности пропускаю ошибки.
Анрил мне очень нра, пусть даже для ТС он ещё не заточен как нужно.
А Spectaculator-а просто не хватает по возможностям/удобству. Либо я не приучился ним пользоваться.
а дебажу я всегда :)
Тот, кто выдаст ВСЕ коды к скрытым загружающимся частям OSCOSS, я выставлю лучший коньяк что я нахожу в магазинах.
Отправлю в Россию :)
не шутка.
А так, в худшем случае VBI остается при своих. Ну а если даже кто-то найдет все коды… ТАКОМУ — НЕ ЖАЛКО!
Вова, я правильно мысль уловил?
кому коньяка? 5 звёзд, все дела! :)
nyuk , именно — не жалко.