Дебаг, или как защитить себя от насекомых

Спецвыпуск Хакер, номер #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;" (получится такая прога):

Назад на стр. 004-024-1  Содержание  Вперед на стр. 004-024-3

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001