Дебаг, или как защитить себя от насекомых
Спецвыпуск Хакер, номер #004, стр. 004-024-2
Дебагер мы будем изучать микрософтовский (не пугайся, "Микрософт" - не значит "очень плохо", в нашем случае это просто означает "достаточно просто"), тот, что из Visual C++ 6, на примере самой простой проги на С++. Прога ничего не делает, только печатает на экране "Hello world!" и завершается. Можно заменить "Hello world" на "Bill G***s must die". Чтоб написать прогу "Хело Ворлд" - можешь прочесть о ней в этом спеце целую статью, а можешь, не вдаваясь в подробности, просто читать дальше :). Для начала надо запустить Visual C++. Затем выбрать File->New... и в появившемся окне выбрать вкладку Projects, а затем иконку Win32 Console Application.
В поле Project Name набей название твоей проги типа VASYAPUPKINEXE. После того как нажмешь ОК, в появившемся окне будет предложено сгенерить конкретный проект: 1) пустой проект, 2) простое приложение (ничего не делает), 3) приложение Хеллоу Уорлд, 4) приложение с поддержкой MFC. Выбери третий пункт, нажми Finish, а в следующем окне нажми ОК.
Visual C++ сгенерил программу, которую и следует отладить. Однако, перед тем как начать, ты должен знать об основных методах работы в дебагере, их два:
пошаговое выполнение (это когда каждая строчка исходного кода выполняется по нажатию клавиши) и прерывание по контрольным точкам (т.е. прога выполняется до определенного момента, а именно - до строчки в исходнике, которую ты укажешь, и затем останавливается на этом месте, после чего ты можешь перейти к пошаговому выполнению, просмотреть значения переменных в данный момент времени или просто пойти попить кофе). Можно начинать: возьми мышку в правую руку (можно в левую) и выбери пункт меню Build->Build xxxxxxxx.exe, а затем Build->Start debug->Step Into.
Этим ты начнешь пошаговое выполнение программы. После непродолжительного треска винта перед глазами развернется рабочая область дебагера, где основное место занимает окошко с исходником. Слева от текста проги есть желтая стрелочка (в китайской версии Visual C++ - маленький значок "серп и молот" ;) ), которая показывает, на каком месте прервана программа.
Нажми F10 или выбери иконку, как на рисунке.
Стрелка опустится вниз: выполнилась еще одна строчка. Теперь посмотри в ДОСовское окно твоей программы - оно пустое, а затем перейди обратно в отладчик и снова нажми F10. Если ты посмотришь теперь в окно программы, то увидишь надпись вверху "Hello world", результат работы строчки printf ("Hello world\n"). Нажми Shilft+F5, и дебаг завершится.
Еще DebuG
Чувак, это круто - ты только что отлаживал программу в пошаговом режиме. Теперь разверни исходник и щелкни правой кнопкой мышки в поле слева от строчки return 0. В меню щелкни пункт Insert/Remove Breakpoint, после чего эта строчка пометится красным кружочком. Запусти программу кнопкой F5. Видишь, прога остановилась на той строчке, которую ты пометил, и теперь ты можешь узнать ее полное состояние в этом месте. Ты спросишь меня, зачем вся эта фигня тебе нужна и какая от нее польза. Дело в том, что ты не должен все время слепо щелкать по кнопке F10 и ждать, что твоя программулина ни с того ни с сего заработает. Когда ты пошагово выполняешь программу, ты можешь следить за значениями переменных в твоем коде в специальном окне Watch, поэтому ты можешь найти место, в котором нужная тебе переменная изменилась, и узнать ее новое значение. Это позволяет довольно просто находить практически любые твои ошибки, ведь так легко определить место, где что-то в программе неправильно просчитывается. Сейчас ты узнаешь, как все это работает на практике. Добавим в нашу программу переменную и будем, изменяя ее, следить за ее значениями. В исходнике после строчки #include <stdio.h> добавь строчку "int i;", а после строчки printf("Hello world\n") добавь строчку "i = 10;" (получится такая прога):