
- •Лабораторная работа №2 (1 часть) Отладка консольного приложения.
- •Отладочная и окончательная версии.
- •Переключение между отладочной и окончательной версией.
- •Установки по умолчанию для отладочной и окончательной версий
- •Изменение опций отладки
- •Изменение формата генерируемой отладочной информации
- •Генерация карты символов
- •Что такое файл .Pdb?
- •Что такое файл .Dbg?
- •/Gd, /Gr, /Gz (соглашения о вызовах)
- •Отладочные макросы
- •Установка точек останова
- •Расширенные точки останова
- •Установка точек трассировки
- •Использование Утверждений
- •Отладка программы
- •Использование циклов для решения задач численными методами Вычисление значения с заданной точностью методом прямоугольников
- •Вычисление по формуле Симпсона путем деления отрезка [a,b] на множество более мелких отрезков
- •Методом простых итераций
- •Методом деления отрезка пополам
Что такое файл .Pdb?
Когда отладчик активируется с включенной опцией Use Program Database, во время постройки генерируется дополнительный файл. Он позволяет Visual C++ производить инкрементную компоновку отладочных версий программы. Сегодняшние версии программы позволяют как компоновщику, так и интегральной среде работать непосредственно с файлами .pdb.
Visual C++ будет генерировать только один выходной .pdb-файл. Однако если запустить shake-файл, который создавался не в Microsoft Visual C++, обнаружатся два таких файла:
Один, VCxO.pdb (где вместо х нужно подставить номер текущей версии Visual C++), содержит отладочную информацию из всех отдельных объектных модулей (.obj).
Файл VCxO.pdb создается потому, что компилятор не знает имени конечного исполняемого модуля. Какие для его генерации требуются файлы .obj, тоже не ясно до того момента, когда будет запущен компоновщик, поэтому информация временно записывается в VCxO.pdb. Компилятор дописывает в его конец отладочную информацию всякий раз, когда он генерирует очередной .obj-файл.
VCxO.pdb содержит всю информацию о типах программы, но в нем нет никакой информации о символах. Это дает определенные преимущества, когда приложение подключает стандартные заголовочные файлы вроде windows.h. Поскольку VCxO.pdb не содержит информации о символах, отдельные .obj-файлы не будут нести избыточного ее объема для дублированных windows.h.
Второй созданный файл будет иметь имя project_пате.pdb. Он содержит всю отладочную информацию для файла project_пате.ехе и находится в каталоге \WINDEBUG.
Файл project_name.pdb генерируется на этапе компоновки. Он содержит отладочную информацию для конечного .exe-файла проекта. Файл project naте.pdb объединяет всю необходимую информацию, в том числе прототипы функций. Два рода файлов .pdb имеют одинаковое расширение потому, что они сходны по своей архитектуре и оба допускают инкрементное обновление. Компоновщик вставляет в .ехе или .dll ссылку на местоположение файла. Отладчик может найти этот файл, если маршрут и имя программы изменятся. В этом случае для поиска файла .pdb он просмотрит текущий каталог по умолчанию.
Что такое файл .Dbg?
Последний выпуск Visual C++ позволяет окнам дизассемблера и стека вызовов расшифровывать декорирующую часть имен C++. Теперь вы можете видеть имена C++ с корректным списком аргументов. Файлы .dbg, созданные 32-битными инструментальными средствами NT, имели разделы с информацией COFF или CodeView. Отладчик может читать оба эти типа файлов; однако он игнорирует раздел COFF и ищет только информацию Codeview.
Когда исходный код недоступен, отладчик все же может воспользоваться .dbg-файлами в том случае, если они состоят из двоичных отладочных записей формата Codeview. Даже без исходного кода вы, благодаря файлам .dbg, можете устанавливать контрольные точки, наблюдать переменные и просматривать стек вызовов.
Поиск ошибок рабочей версии в отладочной
Некоторые дефекты проявляются, только когда вы переходите к окончательной версии (/01, /02, /Ох или /Оg). Вы можете включить опцию /GZ, чтобы разрешить проверки времени выполнения и перехватить возникающие ошибки в отладочной версии (/Od). Опция /GZ несовместима с 01, /02, /Ох или /Og (она отключит все директивы #pragma optimize в вашей программе). Когда вы указываете /GZ, Visual C++ будет автоматически инициализировать все локальные переменные, проверять корректность стека вызовов указателей и корректность стека вызовов.