Скачиваний:
19
Добавлен:
17.04.2013
Размер:
377 Кб
Скачать

Разница между Step Over и Step Into

Эти команды отладчика (клавиши F10 и F11) различаются только в случае, когда текущий оператор (т. е. тот, что будет исполняться при следующем нажатии F10 или F11) является вызовом функции или метода. Как подразумевает название Step Over, при нажатии F10 отладчик перешагивает через вызов, выполняя вызванную процедуру с максимальной скоростью, и останавливается на следующем после вызова операторе в вызывающей процедуре. В случае же Step Into, когда процедуру должно вызвать нажатие F11, отладчик входит в код вызванной процедуры (функции или метода) и останавливается на операторе внутри нее. При вызовах функций стандартных библиотек C/C++ пользуйтесь F10, а не F11 (Step Info), чтобы перешагнуть вызов и избежать отладки библиотечного кода.

Go

Подчас слишком долго приходится нажимать F10 или F11, прогоняя операторы по одному. Например, в хорошо написанных программах, использующих уже написанные и отлаженные ранее алгоритмы, проход через участки заведомо верных старых строчек может отнимать массу времени. В этом случае выполняйте команду Go (F5). Она выполняет вашу программу с полной скоростью до следующей контрольной точки (они обсуждаются ниже) или до самого конца.

Одно из самых полезных применений команды Go связано с отладкой циклов. Установка контрольной точки в теле цикла и последовательное нажатие F5 говорит отладчику, что выполнять тело цикла нужно на полной скорости. Применяйте этот подход для подсчета корректных итераций.

Run to Cursor

Команда Run to Cursor (CTRL+F10) похожа на Go, но не требует предварительно определенной контрольной точки. Вместо контрольной точки вы просто устанавливаете курсор редактора (т. н. I-beam) в любом месте строки, где нужно сделать остановку, и нажимаете CTRL+F10.

Значки инструментальной панели отладчика

Когда вы начинаете отлаживать программу любым из описанных в предыдущем разделе способов, по умолчанию на экране появляется инструментальная панель отладчика. Эту панель можно видеть на рис.4. Она расположена поверх окна Workspace. Если вам не нравится такое расположение, вы можете перетащить панель мышью в любое другое место. Разумеется, вы можете затащить панель на главное меню в качестве инструментальной линейки.

Н а рис.5 показан увеличенный вид инструментальной панели Debug. Далее объясняется каждый из ее значков по порядку слева направо (сначала верхний, затем нижний ряд).

Рис.4. Увеличенная панель Debug.

Р ис.5 Начальная инструментальная панель Debug.

Restart

Значок Restart (CTRL+SHIFT+F5) говорит отладчику, что вы хотите запустить программу с самого начала, а не с текущей позиции отладки.

Stop Debugging

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

Break Execution

Эта кнопка останавливает исполнение программу в текущей точке

Аpply Code Changes, Edit and Continue

Командой Apply Code Changes (ALT+F10), которая появилась в Visual C++ 6.0, вы можете внести в программу изменения исходного кода, произведенные в процессе отладки. Эта команда применяется при работе или приостановке программы в отладчике. Для внесения в отлаживаемую программу сделанных изменений выберите Apply Code Changes в меню Debug или четвертую кнопку инструментальной панели.

В случае включенной опции Edit and Continue можно вносить изменения автоматически по командам Go и Step (при выключенной автоматической опции вы можете вносить изменения командой Apply Code Changes.)

Чтобы включить/выключить автоматическое внесение изменений, нужно выбрать в меню Tools | Options, а затем закладку Debug. На странице Debug пометьте или сбросьте флажок Debug commands invoke Edit and Continue. Так как этот флажок относится к инструментальным опциям, а не к опциям проекта, его установка или сброс влияет сразу на все проекты, с которыми вы сейчас работаете. Кроме того, при изменении состояния опции не требуется перестраивать ваше приложение. Ее можно менять прямо в процессе отладки.

Информация, необходимая для автоматического внесения изменений, хранится в базе данных проекта. Когда вы создаете новый проект, в диалоге Project Settings выбирается соответствующая опция (Program Database for Edit and Continue). Если вы меняете эту опцию, Edit and Continue выключается.

Если вы хотите отключить Edit and Continue для конкретного проекта, то это можно сделать. Выберите в меню Project Settings, затем закладку C/C++ и категорию General. Затем откройте список Debug Info и выберите Program Database for Edit and Continue, чтобы включить или отключить опцию. Нажмите ОК и перестройте приложение.

Не включайте опцию Edit and Continue, если вы отлаживаете оптимизированный код. Она несовместима с оптимизациями, и вы получите сообщение компилятора об ошибке.

Типы изменений, которые нельзя автоматизировать

Вследствие особенностей внутреннего механизма Edit and Continue для общего размера новых переменных, добавленных в активную функцию, установлен предел в 64 байта. Активная функция - это любая функция, находящаяся в данный момент на стеке вызовов. С другой стороны, нет никакого ограничения на переменные функций, на стеке не находящихся. В следующем списке перечислены категории модификаций, которые автоматическое Edit and Continue обрабатывать не может:

• Обновление файлов ресурсов;

• Изменение кода в файлах только для чтения

• Изменение оптимизированного кода ключей /О1, /О2, /Og, /Ox, /Obl /Оb2;

• Модификация блоков обработки исключений;

• Модификация типов данных, включая определения классов, структур,объединений и перечислений;

• Введение новых типов данных;

• Удаление функций или изменения в прототипах;

• Изменение глобального или статического кода;

• Обновление исполняемых модулей, загруженных с другой машины и не построенных локально.

Если вы сделаете одно из вышеописанных изменений и попытаетесь внести модификации в выполняющийся код, то в окне Output появится сообщение об ошибке.

Show Next Statement

Эта команда (ALT+NUM*) показывает следующий оператор программного кода. Если исходный код не доступен, Show Next Statement показывает оператор в окне дизассемблера.

Step Into

При выполнении этой команды (F11) для оператора с вызовом процедуры (функции или метода) производится переход внутрь вызванной процедуры.

Step Over

При выполнении Step Over (F10) для оператора с вызовом процедуры отладчик перешагивает через вызванный код, который исполняется с максимальной скоростью. Программа останавливается на первом операторе после вызова.

Step Out

Команда Step Out (SHIFT+F11) заставляет отладчик переключиться на полную скорость исполнения до конца текущей функции и остановиться на инструкции непосредственно после возврата из нее. Команду можно применить для быстрого возврата из отлаживаемой функции, когда вы убедились, что ошибка находится не в ней.

Run to Cursor

Эта команда (CTRL+F10) похожа на Go, но ей не требуется предварительно определенной контрольной точки. Для выполнения Run to Cursor нужно просто установить курсор редактора в строку исходного кода, с которой вы хотите продолжить отладку, и выбрать соответствующий значок!

QuickWatch

Команда (SHIFT+F9) открывает окно QuickWatch, в котором вы можете оценивать значения выражений.

В окнах Watch и QuickWatch можно также отображать регистры ММХ, используя для них символы ММО-ММ7. Это 64-битные целые регистры будут отображаться для всех машин х86 вне зависимости от того, поддерживают ли они инструкции ММХ.

Watch

Этот значок открывает окно Watch, в котором отображаются переменные приложения по их именам, а также выбранные выражения.

Variables

Значок открывает окно Variables, в котором отображается информация переменных текущего и предыдущего операторов, а также возвращаемые функциями значения (страница Auto), локальные переменные текущей функции (страница Locals) и объект, на который указывает this (страница This).

Registers

Значок открывает окно Registers отладчика, отображающее регистру, общего назначения CPU и состояние его флагов.

Memory

Кнопку можно использовать для открытия; окна Memory, отображающее содержимое памяти программы.

Call Stack

Открывает окно стека вызовов, где отладчик перечисляет вызванные к данному моменту процедуры, которые еще не закончились.

Disassembly

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