Отладка приложений


Команда Set Next Statement


Одним из самых известных скрытых свойств отладчика является команда Set Next Statement. Она доступна как в окне исходного кода, так и в окне Disassembly — по контекстному меню (открываемому щелчком правой кнопки мыши), но только тогда, когда выполняется отладка. Команда Set Next Statement позволяет изменять указатель инструкции (команды), т. е. устанавливать его на различные места программы. То же самое можно сделать и прямой установкой регистра EIP. Изменение точки выполнения программы — фантастическая отладочная техника, особенно если во время блочного тестирования требуется протестировать собственные обработчики ошибок.

Имейте в виду, если не проявить чрезвычайную осторожность, то изменение указателя инструкции может легко привести к аварийному завершению программы. Если программа выполняется в режиме отладки, то использование Set Next Statement не приводит к большим неприятностям. Однако в оптимизированном режиме финальной сборки безопаснее всего выполнять команду Set Next Statement только в окне Disassembly. Компилятор будет перемещать код так, что исходные строки могут и не выполняться линейно. Кроме того, нужно знать, создает ли ваш код временные переменные в стеке во время использования Set Next Statement. В главе 6 последняя ситуация рассмотрена более подробно.

Если гипотеза состоит в том, что обнаруженная ошибка могла быть в некоторой ветви кода, надо установить точку прерывания в отладчике перед подозрительной функцией или функциями. Затем проверить данные и параметры, входящие в функции и выполнить пошаговый проход через эти функции (step over). Если проблема не дублируется, выполните команду Set Next Statement, чтобы вернуть точку выполнения назад, к точке прерывания, и измените данные, входящие в функции. Эта тактика позволит протестировать несколько гипотез в одной отладочной сессии, экономя таким образом время. Нетрудно видеть, что невозможно применять эту технику во всех случаях, потому что, как только вы выполняете некоторый код в своей программе, его повторное выполнение может нарушить ее состояние. Set Next Statement лучше всего работает на коде, который не слишком сильно изменяет свое состояние.




Начало  Назад  Вперед



Книжный магазин