Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR1_Informatika.doc
Скачиваний:
9
Добавлен:
27.03.2015
Размер:
465.41 Кб
Скачать
      1. Позиционные точки останова

В простейшем случае точка останова жёстко привязывается к строке в программе (такие точки называются позиционными). Позиционную точку останова можно установить прямо в редакторе кода. Для этого нужно поместить курсор на нужной строчке и вызвать команду Debug->Insert/Remove Breakpoint (или нажать F9). Для удаления точки останова используется та же команда.

Чтобы поставить точку останова на некоторую функцию, нужно ввести её имя в поле ввода Find на стандартной панели инструментов, а затем нажать F9. Кроме того, можно выбрать нужную функцию или метод в окне ClassView, а затем также нажать F9.

Точки останова на ассемблерную инструкцию устанавливаются в окне Disassembly. Переместитесь к нужному адресу и нажмите F9. Проще всего переместиться к нужному адресу, используя команду Edit->Go To.

      1. Окно Edit->Breakpoints

Окно Breakpoints из меню Edit предоставляет дополнительные возможности для работы с точками останова. В нижней части этого окна находится список уже поставленных точек останова (любую из них можно активизировать, отключить или удалить), а вверху расположены три закладки, предназначенные для установки точек останова различных типов.

        1. Закладка Location

Рисунок 14. Закладка Location

На закладке Location (рис. 14) настраиваются позиционные точки останова. Все рассмотренные выше разновидности точек можно установить и с этой закладки. Местонахождение точки останова указывается в поле Break at в формате:

{имя_функции, имя_исходного_файла, имя_двоичного_модуля} адрес

Здесь "адрес" – это номер строки в программе (ему должен предшествовать символ "@"), адрес ассемблерной инструкции или имя функции (метода). Выражение в фигурных скобках называется контекстом. Можно опускать как отдельные параметры контекста, так и весь контекст целиком. Главное, чтобы при этом не возникало неоднозначности. Если, к примеру, точка останова ставится на строку в программе, необходимо указать файл, в котором эта строка расположена. Иначе возникает неоднозначность.

Для задания местонахождения точки останова можно воспользоваться окном Advanced breakpoint. Чтобы вызвать это окно, щелкните на стрелке справа от поля ввода и выберите пункт Advanced.

В окне Condition можно дополнительно указать условие срабатывания точки останова. Условием может быть любое выражение. Если выражение имеет тип bool, точка останова срабатывает, когда оно истинно; в противном случае она срабатывает при изменении значения выражения.

Бывают случаи, когда точку останова нужно пропустить несколько раз, прежде чем прерывать на ней программу. Специально для этого в окне Condition предусмотрено ещё одно поле, Skip count (в самом низу). С помощью этого поля можно, к примеру, пропустить 10 итераций цикла и прервать программу только на одиннадцатой.

        1. Закладка Data

Рисунок 15. Закладка Data

На закладке Data (рис. 15) устанавливаются точки останова по данным. Их отличие состоит в том, что они могут сработать в любом месте программы, как только изменится (или станет истинным) введённое вами выражение.

Если выражение имеет смысл только в определённом контексте (например, в нём используются локальные переменные какой-либо функции), этот контекст необходимо указать в том же формате, что и для позиционной точки останова. Но здесь уже нужно указать имя функции, а не файла.

Visual C++ позволяет вам контролировать изменение не только отдельных переменных, но и массивов. Рассмотрим следующий фрагмент программы.

int main(int argc, char* argv[])

{

...

int array[10];

for(int i=0; i<10; i++)

array[i] = 0;

...

}

Если теперь задать на закладке Data точку останова в виде '{main,,} array', то программа будет прерываться каждый раз, когда хоть один элемент массива array меняет своё значение (в нашем примере – на каждой итерации цикла).

Можно также контролировать не целый массив, а только некоторую его часть. Для этого на закладке Data имеется поле ввода Enter the number of elements to watch in an array or structure. В этом поле задаётся количество элементов массива, которое нужно контролировать. Отсчёт ведётся от элемента массива, к которому вы обращаетесь в выражении (по индексу или указателю).

Вернёмся к нашему примеру. Чтобы отслеживать изменения в первых трёх элементах массива array, нужно задать для точки останова выражение '{main,,} array[0]' или '{main,,} *array'. Чтобы реагировать на изменения в элементах с третьего по пятый, нужно задать '{main,,} array[2]' или '{main,,} *(array+2)'. И в том, и в другом случае нужно задать количество контролируемых элементов - три.

Если вам потребуется отслеживать изменения в нескольких несвязанных между собой блоках массива, придётся завести по одной точке останова на каждый блок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]