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