В отличие от стандартизированного языка С++, набор команд, поддерживаемый отладчиком, варьируется от производителя к производителю. К счастью, большинство отладчиков поддерживают некоторый базовый набор команд. Необходимые нам команды есть как в 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