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


Процедуры отладки

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

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

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

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

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

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

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

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

Применение

Эквивалент в .NET Framework

_ASSERT

Вычисляет выражение и создает отладочный отчет, когда результат FALSE

System::Diagnostics::Debug::Assert

_ASSERTE

Аналогично _ASSERT, но не содержит выражение в создаваемом отчете

System::Diagnostics::Debug::Assert

_CrtCheckMemory

Проверяет целостность выделенных блоков памяти в отладочной куче

System::Diagnostics::PerformanceCounter

_CrtDbgBreak

Задает точку останова.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtDbgReport, _CrtDbgReportW

Создает отладочный отчет с сообщением для пользователя и отправляет отчет в три возможные назначения

System::Diagnostics::Debug::Write, System::Diagnostics::Debug::Writeline, System::Diagnostics::Debug::WriteIf, System::Diagnostics::Debug::WriteLineIf

_CrtDoForAllClientObjects

Вызывает предоставленную приложением функции для всех типов _CLIENT_BLOCK в куче

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtDumpMemoryLeaks

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

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtIsMemoryBlock

Проверяет, что указанный блок памяти находится в локальной куче и что он имеет допустимый идентификатор типа блоков отладочной кучи

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtIsValidHeapPointer

Проверяет, что определенный указатель расположен в локальной куче

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtIsValidPointer

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

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtMemCheckpoint

Получает текущее состояние отладочной кучи и сохраняет его в предоставленной приложением структуре _CrtMemState

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtMemDifference

Сравнивает два состояния памяти на значащие отличия и возвращает результаты

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtMemDumpAllObjectsSince

Сбрасывает сведения об объектах в куче после достижения контрольной точки или с самого начала выполнения программы

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtMemDumpStatistics

Сбрасывает данные заголовка отладки для указанного состояния памяти в понятной пользователю форме

System::Diagnostics::PerformanceCounter

_CrtReportBlockType

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

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetAllocHook

Устанавливает определяемую клиентом функцию выделения путём её прикрепления в отладочный процесс выделения памяти среды выполнения языка C.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetBreakAlloc

Устанавливает точку останова на указанном порядковом номере выделения объекта

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetDbgFlag

Извлекает или изменяет состояние флага _crtDbgFlag для управления поведением выделения диспетчера отладочной кучи

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetDumpClient

Задает определенную приложением функцию, которая вызывается при каждом вызове функции отладочного дампа, чтобы сбросить блоки памяти типа _CLIENT_BLOCK

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetReportFile

Указывает файл или поток, используемый в качестве назначения для определенного типа отчета _CrtDbgReport

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetReportHook

Задает определенную клиентом функцию путем присоединения ее к отладочному процессу уведомлений времени выполнения С.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetReportHook2, _CrtSetReportHookW2

Устанавливает или отменяет определяемую клиентом функцию отчетов путём её прикрепления в процесс создания отчетов среды выполнения языка C (только отладочная версия).

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_CrtSetReportMode

Определяет общие назначения для определенного типа отчета, созданного _CrtDbgReport

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_RPT[0,1,2,3,4]

Отслеживает ход выполнения приложения созданием отладочного отчета путем вызова _CrtDbgReport со строкой формата и переменным количеством аргументов. Не предоставляет информацию о исходном файле и номере строки.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_RPTF[0,1,2,3,4]

Аналогична макросам _RPTn, но предоставляет имя файла и номер строки в файле, где возник запрос отчета

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_calloc_dbg

Выделяет указанное число блоков памяти в куче с дополнительным местом для отладочного заголовка и буферов перезаписи

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_expand_dbg

Изменяет размер указанного блока памяти в куче, увеличивая его или сжимая

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_free_dbg

Освобождает блок памяти в куче

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_fullpath_dbg, _wfullpath_dbg

Создает абсолютный или полный путь для указанного относительного имени пути, используя _malloc_dbg для выделения памяти.

System::IO::File::Create

_getcwd_dbg, _wgetcwd_dbg

Получает текущую рабочую папку, используя _malloc_dbg выделения памяти.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_malloc_dbg

Выделяет блок памяти в куче с дополнительным местом для отладочного заголовка и буферов перезаписи

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_msize_dbg

Вычисляет размер блока памяти в куче

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_realloc_dbg

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

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

_strdup_dbg, _wcsdup_dbg

Дублирует строки, используя _malloc_dbg для выделения памяти.

System::String::Clone

_tempnam_dbg, _wtempnam_dbg

Создает имена, которые можно использовать для создания временных файлов, используя _malloc_dbg для выделения памяти.

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

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

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

acos, acosf, acosl

_fpclass

_nextafter

asin

_fpieee_flt

pow

atan, atan2

_fpreset

printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l*

_cabs

frexp

_scalb

ceil

_hypot

scanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l*

_chgsign, _chgsignf, _chgsignl

_isnan

setjmp

_clear87, _clearfp

_j0

sin

_control87, _controlfp, __control87_2

_j1

sinh

copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl

_jn

sqrt

cos

ldexp

_status87, _statusfp

cosh

log

tan

Exp

log10

tanh

fabs

_logb

_y0

_finite

longjmp

_y1

floor

_matherr

_yn

fmod

modf

 

* Хотя исходный код доступен для большей части из этой процедуры, он осуществляет внутренний вызов другой процедуры, для которой исходный код не предоставляется.

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

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

Процедура C abort

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

Процедура C — assert

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

См. также

Ссылки

Процедуры среды выполнения по категориям

Проверка ошибок во время выполнения