Поделиться через


Подпрограммы отладки

Отладочная версия библиотеки времени выполнения C предоставляет множество служб диагностики, упрощающих отладку программ и позволяющих разработчикам:

  • пошагово входить непосредственно в функции времени выполнения во время отладки;

  • разрешать утверждения, ошибки и исключения;

  • трассировать выделение памяти в куче и предотвращать утечки памяти;

  • выводить отладочные сообщения пользователю.

Отладочные версии подпрограмм библиотеки времени выполнения C

Чтобы использовать эти подпрограммы, _DEBUG необходимо определить флаг. В окончательной сборке приложения все эти подпрограммы не выполняют никаких действий. Дополнительные сведения об использовании новых подпрограмм отладки см . в статьях о методах отладки CRT.

Маршрут Использование
_ASSERT Вычисление выражения и создание отчета отладки при получении результата FALSE
_ASSERTE Аналогична _ASSERT, но включает в создаваемый отчет выражение, где произошел сбой
_CrtCheckMemory Проверяет целостность выделенных блоков памяти в отладочной куче
_CrtDbgBreak Устанавливает точку останова.
_CrtDbgReport, _CrtDbgReportW Создает отладочный отчет с сообщением для пользователя и отправляет отчет в три возможных назначения
_CrtDoForAllClientObjects Вызывает предоставленную приложением функцию для всех типов _CLIENT_BLOCK в куче
_CrtDumpMemoryLeaks Сбрасывает все блоки памяти в отладочной куче при значительной утечке памяти
_CrtIsMemoryBlock Проверяет, что указанный блок памяти находится в локальной куче, а также что он имеет допустимый идентификатор типа блока отладочной кучи
_CrtIsValidHeapPointer Проверяет, что указанный указатель находится в локальной куче
_CrtIsValidPointer Проверяет, что указанный диапазон памяти допустим для чтения и записи
_CrtMemCheckpoint Получает текущее состояние отладочной кучи и сохраняет его в предоставленной приложением структуре _CrtMemState
_CrtMemDifference Сравнивает два состояния памяти на предмет значащих отличий и возвращает результаты
_CrtMemDumpAllObjectsSince Сбрасывает сведения об объектах в куче с указанной контрольной точки или с начала выполнения программы
_CrtMemDumpStatistics Сбрасывает данные заголовка отладки для указанного состояния памяти в понятной пользователю форме
_CrtReportBlockType Возвращает тип и подтип блока, связанные с указателем блока заданной отладочной кучи.
_CrtSetAllocHook Устанавливает определяемую клиентом функцию выделения путем присоединения ее к отладочному процессу выделения памяти времени выполнения C
_CrtSetBreakAlloc Устанавливает точку останова на указанном порядковом номере выделения объекта
_CrtSetDbgFlag Извлекает или изменяет состояние флага _crtDbgFlag для управления поведением выделения диспетчера отладочной кучи
_CrtSetDumpClient Устанавливает определяемую приложением функцию, которая вызывается при каждом вызове функции отладочного дампа для сброса блоков памяти типа _CLIENT_BLOCK
_CrtSetReportFile Указывает файл или поток, используемый в качестве назначения для определенного типа отчета _CrtDbgReport
_CrtSetReportHook Устанавливает определяемую клиентом функцию отчетов путем присоединения ее к отладочному процессу отчетов времени выполнения С
_CrtSetReportHook2, _CrtSetReportHookW2 Устанавливает или удаляет определяемую клиентом функцию отчетов путем ее присоединения к отладочному процессу отчетов времени выполнения языка C.
_CrtSetReportMode Задает общие назначения для определенного типа отчета, создаваемого _CrtDbgReport
_RPT[0,1,2,3,4] Отслеживает ход выполнения приложения путем создания отладочного отчета, вызывая _CrtDbgReport со строкой формата и переменным количеством аргументов. Не предоставляет сведений об исходном файле и номере строки.
_RPTF[0,1,2,3,4] Аналогична макросам _RPTn, но предоставляет имя файла и номер строки в файле, где возник запрос отчета
_calloc_dbg Выделение указанного количества блоков памяти в куче с дополнительным пространством для заголовка отладки и перезаписи буферов
_expand_dbg Изменяет размер указанного блока памяти в куче, увеличивая его или сжимая
_free_dbg Освобождает блок памяти в куче
_fullpath_dbg, _wfullpath_dbg Создайте абсолютное или полное имя пути для указанного относительного имени пути, используя _malloc_dbg для выделения памяти.
_getcwd_dbg, _wgetcwd_dbg Получите текущий рабочий каталог, используя _malloc_dbg для выделения памяти.
_malloc_dbg Выделение блока памяти в куче с дополнительным пространством для заголовка отладки и перезаписи буферов
_msize_dbg Вычисляет размер блока памяти в куче
_realloc_dbg Перераспределяет указанный блок памяти в куче, перемещая его и (или) изменяя его размер
_strdup_dbg, _wcsdup_dbg Дублирует строку, используемую _malloc_dbg для выделения памяти.
_tempnam_dbg, _wtempnam_dbg Создавать имена, которые можно использовать для создания временных файлов, используя _malloc_dbg для выделения памяти.

Подпрограммы среды выполнения C, недоступные в форме исходного кода

Отладчик можно использовать для пошагового выполнения исходного кода большинства подпрограмм среды выполнения C в процессе отладки. Однако корпорация Майкрософт считает, что некоторые технологии являются собственными и поэтому не предоставляют исходный код для подмножества этих подпрограмм. Большинство этих подпрограмм относится либо к обработке исключений, либо к группам операций с плавающей запятой, однако есть также несколько подпрограмм других категорий. Эти подпрограммы перечислены в следующей таблице.

Хотя исходный код доступен для большинства printf и scanf подпрограмм, они вызывают внутреннюю процедуру, для которой исходный код не предоставляется.

Подпрограммы, которые ведут себя иначе в отладочной сборке приложения

Некоторые функции времени выполнения C и операторы C++ ведут себя иначе при их вызове из отладочной сборки приложения. (Можно создать отладочную сборку приложения, определив _DEBUG флаг или связав отладочную версию библиотеки времени выполнения C.) Различия в поведении обычно состоят из дополнительных функций или сведений, предоставляемых подпрограммой для поддержки процесса отладки. Эти подпрограммы перечислены в следующей таблице.

Подпрограмма C abort

Подпрограмма C assert

Оператор C++ delete

Оператор C++ new

См. также

Универсальные подпрограммы среды выполнения C по категориям
Проверка ошибок во время выполнения