Работа с отладчиком...134
В отличие от стандартизированного языка С++, набор команд, поддерживаемый отладчиком, варьируется от производителя к производителю. К счастью, большинство отладчиков поддерживают некоторый базовый набор команд. Необходимые нам команды есть как в Dev-С++, так и в Microsoft Visual С++ .NET; в них также имеется возможность вызова этих команд с помощью меню и функциональных клавиш. В табл. 10.1 приведён список основных команд и клавиш их вызова.
Таблица 10.1. Команды отладчиков Microsoft Visual С++ .NET и Dev-C++
_________________
Команда— Visual С++— GNU С++ ( rhide )
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Отладка — —
Шаг внутрь ( Step In ) — —
Следующий шаг ( Step Over ) — —
Продолжить выполнения — —
Просмотр переменной ( View Variable ) — Только в меню — Только в меню
Установка точки останова ( Set Breakpoint )* — —
Добавить в наблюдаемые ( Add watch ) — Только в меню —
Перезагрузка программы ( Program Reset ) — —
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
__________
*Щелчок слева от строки исходного текста С++ в окне редактора представляет собой альтернативный путь установки точек останова.
_________________
134 стр. Часть 2. Становимся функциональными программистами
Запуск тестовой программы...135

«Лучший способ исправить ошибки в программе — пройти её пошагово. Приведённая ниже программа содержит несколько ошибок, которые надо найти и исправить. Эта программа имеется на прилагаемом компакт-диске в файлеConcatenate1.срр .»
[ Диск ]
/* Concatenate - конкатенация двух строк */
/* со вставкой " - " между ними. В этой версии имеются ошибки. */
#include
#include
#include
#include
using namespace std ;
void stringEmUp( char* szTarget ,
char* szSource1 ,
char* szSource2 ,
int nLength ) ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
/* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */
setlocale (LC_ALL,".1251");
cout << "Конкатенация двух строк со вставкой \" - \"\n"
<< "( В этой версии имеются ошибки. )" << endl ;
char szStrBuffer[ 256 ] ;
/* Создание двух строк одинаковой длины... */
char szString1[ 16 ] ;
strncpy( szString1 , "This is a string" , 16 ) ;
char szString2[ 16 ] ;
strncpy( szString2 , "THIS IS A STRING" , 16 ) ;
/* ...и объединение их в одну */
stringEmUp( szStrBuffer ,
szString1 ,
szString2 ,
16 ) ;
// Вывод результата
cout << "<" << szStrBuffer << ">" << endl ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
void stringEmUp(char* szTarget,
char* szSource1,
char* szSource2,
int nLength)
{
strcpy( szTarget , szSource1 ) ;
strcat( szTarget , " - " ) ;
strcat( szTarget , szSource2 ) ;
}
_________________
135 стр. Глава 10. Отладка программ на С++
Соберите и запустите программу. Вместо объединения двух строк программа может вернуть всё, что угодно. Нам надо обратиться к отладчику, чтобы разобраться, что же в этой программе не так.

Пошаговое выполнение программы...136
Первое, что стоит сделать при поиске ошибки с помощью отладчика, — это выполнить программу в отладочном режиме. Попытка выполнить эту программу в отладочном режиме в Dev-C++ ( с помощью клавиши ) приводит к появлению диалогового окна с сообщением об ошибке "Ваша программа вызвала нарушение доступа". Этой информации слишком мало, чтобы разобраться, в чём проблема.

«Подобное сообщение об ошибке обычно говорит о некорректной работе с указателями того или иного типа.»
[ Советы ]
Команда Остановить выполнениезаставляет отладчик заново начать работу с программой ( а не с того места, где вы находитесь ). Никогда не вредно перезагрузить отладчик перед началом работы.
Для того, чтобы увидеть, где именно таится проблема, выполните только часть программы. Отладчик позволяет сделать это посредством так называемых точек останова ( breakpoints). Отладчик всякий раз прекращает выполнение программы при прохождении через точку останова, и передаёт управление программисту.
Читать дальше