05.09.2016 Views

Стефан Р. - С++ Для чайников

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

: с: \wiNNT\System32\command.com -jDlxl<br />

|)Внедите следующее чиспо:!<br />

Доведите следующее чиспо:2<br />

^Введите следующее число:Э<br />

[Введите следующее чиспо:-1<br />

[Exiting Hue to signal SIGI-Pf<br />

division by Zero at eip=0O00161a, x87 status-0000<br />

|eox : -000o81ba ebx-0O0901c5 ecx-000n81bci odx-00880800 esi-00000054 edi-0<br />

Iebp"000a81a8 esp-000a817c progranHI A6CC\III\CRR0R.CXC<br />

jcs:<br />

ids:<br />

ies:<br />

}fs:<br />

kjs:<br />

e1- " "' - base-01c58800 limit O00bfГГГ<br />

sel=01af base=Olc5O000 limit-O80bffff<br />

sel-Olaf<br />

limit=BO0bffff<br />

sel=017f base=O0006d20 Hmit-0000ffff<br />

sel=01bf base=0800UOO0 linit=O010ffff<br />

sel=01af<br />

При stack: I800n81cc.<br />

ill frame traceb^ck CIPs:<br />

0*0000161d<br />

0x00010/46<br />

|H:\GCC\J1J><br />

limi1=QO0bffff<br />

08O281cc] bxceptn stack: 100028128.,080261e01<br />

<strong>Р</strong>ис. П.1. Выполнение первоначальной версии программы прерывается в результате<br />

ошибки<br />

и просто. Например, процессор мог "потерять" выполняемый код и продолжить выполнение<br />

машинных инструкций, не относящихся к программе (такое тоже иногда<br />

случается). Процессор мог использовать инструкцию деления как повод для генерации<br />

сообщения об ошибке, скрыв таким образом настоящий ее источник (программы<br />

с ошибками похожи на поезд, который сошел с рельсов: программа не остановится,<br />

пока не произойдет что-то действительно важное).<br />

О таких программах иногда говорят, что они "стартовали в космос". Ну, а поскольку<br />

к ним прикрепили отдельный ярлык, значит, они встречаются довольно<br />

часто.<br />

Следующим шагом будет запуск программы из среды разработчика, поскольку<br />

иногда среды разработчика, например Visual C++ или GNU C++, могут помочь в поиске<br />

ошибки.<br />

Далее приведен пример с использованием GNU C++ (работа в Visual C++ очень<br />

похожа на описанную ниже).<br />

Откройте программу в редакторе rhide, соберите и запустите ее, нажав клавиши<br />

. Введите 1, 2 и 3, а затем -1, и программа снова аварийно завершится.<br />

f<br />

° B - r ^ <strong>Для</strong> устранения ошибки сначала необходимо найти, какой именно<br />

фрагмент кода ее вызывает. Зная расположение ошибки, вы сможете<br />

воспроизвести ее во время отладки, а Также будете знать, когда ошибка<br />

уже исправлена.<br />

После запуска программы и возникновения ошибки rhide выдает окно, содержащее<br />

сообщение "Program exiting code 255(0xfT)" ("Программа завершилась с кодом выхода<br />

255(0xfT)"), как показано на рис. 11.2. Я многого не знаю, но мне точно известно,<br />

что код нормального завершения нашей программы — 0. Невооруженным глазом<br />

видно, что этот код завершения не равен нулю, а значит, что-то пошло не так. Хотя<br />

я и не знаю, что именно означает код выхода Oxff.<br />

Щелкните на кнопке ОК, и rhide кроме окна редактирования программы откроет<br />

еще два окна.<br />

Глава 11. Отладка программ на C++ 119

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!