调试例程

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运行时调试报告程序过程中安装一个客户端定义的配置功能

不适用。 若要调用标准 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 运算符

请参见

参考

按类别分的运行时例程

运行时错误检查