Всеобщая интеграция
Проверки времени выполнения Новые отладочные окна Улучшенная отладка DLL Отладочные дампы Отсоединение от отлаживаемого процесса |
На момент написания этой статьи финальная версия Visual Studio 7.0 ещё не была мне доступна. Поэтому описывать новый отладчик в деталях я не буду. Но рассказать о его новых возможностях, безусловно, стоит. Этот рассказ основывается на возможностях Visual Studio 7.0 Beta 2.
В среде Visual Studio 7.0 отладчики всех языков были интегрированы в один – Visual Studio Debugger. Этот отладчик поддерживает отладку программ на всех основных языках, отладку скриптов и кроссязыковую отладку. Кроме этого, отладчик может отлаживать несколько программ одновременно и подключаться к программам на удалённых компьютерах.
В VC7 появилось множество проверок времени выполнения, в том числе:
В случае совершения программой потенциально опасного действия её выполнение немедленно прерывается, а отладчик выдаёт предупреждающее сообщение. Если, к примеру, выполнить под отладчиком код:
int array[10];
array[-1] = 0;
|
то на выходе из функции мы получим сообщение об ошибке "Stack around the variable 'array' was corrupted" (рис. 16).
Рисунок 16. Сообщение о выходе за границы массива
Используя директиву #pragma runtime_checks, можно гибко включать и выключать проверки времени выполнения для отдельных функций в отлаживаемой программе.
Набор отладочных окон остался приблизительно тем же, что и в Visual C++ 6.0, но все они были расширены и улучшены. Окна Variables и Watch теперь показывают не только значения, но и типы выражений. Окно Memory "обзавелось" четырьмя закладками. В окне Registers стало возможно просматривать новые наборы регистров – SSE2 и 3DNow! Модальные диалоги Modules и Threads стали нормальными окнами, что гораздо удобнее. Для точек останова также появились новые настройки. Например, теперь для точки останова можно указывать не только строку, но и столбец, к которому она привязывается. Это позволяет точно позиционировать точку останова в строке с несколькими инструкциями.
Интеграция между отладочными окнами также улучшилась. Например, теперь можно перетаскивать переменные в окно Watch прямо из ClassView.
Отладчик Visual Studio 7.0 сам загружает все необходимые отладочные символы, в том числе символы для динамически подгружаемых DLL. Поэтому необходимость в окне Additional DLLs отпала, и оно было убрано из среды.
В отладочных дампах хранится полная информация о состоянии программы в определённый момент времени (содержимое памяти, стека, регистров, стека вызовов и т. д.). Отладчик Visual Studio 7.0 позволяет сохранять такие дампы в процессе отладки, а также загружать дампы – как свои собственные, так и дампы других программ (Doctor Watson, AutoDump и др.). Благодаря этому можно, к примеру, тестировать программу на пользовательской машине (без отладчика, исходных текстов и PDB-файлов), а затем загрузить дамп, сгенерированный в момент ошибки, в Visual Studio и начать отладку прямо с того места, где ошибка возникла. Предыстория ошибки (стек вызовов) также будет вам доступна, благодаря чему ошибку будет найти и исправить гораздо проще.
В Visual C++ 6.0 завершение сеанса отладки приводит к завершению отлаживаемого процесса. Это не всегда удобно. Например, при отладке ISAPI-расширений нет никакого смысла каждый раз останавливать и снова запускать IIS. Отладчик Visual Studio 7.0 позволяет отсоединиться от отлаживаемого процесса, не завершая его. Для этого при подключении к процессу следует задать режим When debugging is stopped: Detach from this process.
Чтобы этот режим был доступен, необходимо запустить специальный сервис dbgproxy. Для этого можно воспользоваться командой net start dbgproxy. |