调试实例

C 运行库的调试版本提供了调试程序更易于并允许开发人员的许多诊断服务:

  • 步骤直接添加到调试期间的运行时函数。

  • 解析断言、错误和异常

  • 跟踪堆分配并防止内存泄漏

  • 报告调试消息给用户

若要使用这些实例,必须定义 _DEBUG 标志。 所有任何这些实例不执行应用程序的发布版本。 有关如何使用新的更多信息调试实例,请参见 调试技术的 CRT

调试 C 运行库实例的版本

实例

使用

.NET framework 等效

_ASSERT

,该结果为 false 时,请计算表达式并生成调试报告

系统:: 诊断:: 调试:: 断言

_ASSERTE

类似于 _ASSERT,但是,在生成的报告包含该失败的表达式

系统:: 诊断:: 调试:: 断言

_CrtCheckMemory

确认的完整性内存分配在调试堆

系统:: 诊断:: PerformanceCounter

_CrtDbgBreak

设置断点。

不适用。 若要调用标准 C 函数,请使用 PInvoke。 有关更多信息,请参见 平台调用示例

_CrtDbgReport, _CrtDbgReportW

生成与用户消息的调试报表并将报告分成三个可能的目标

系统:: 诊断:: 调试:: 写入系统:: 诊断:: 调试:: Writeline系统:: 诊断:: 调试:: WriteIf系统:: 诊断:: 调试:: 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

转储一个指定的内存状态拍调试标题信息速率用户可读形式

系统:: 诊断:: 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 分配内存。

系统:: IO:: 文件:: 创建

_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 分配内存。

系统:: 字符串:: 克隆

_tempnam_dbg, _wtempnam_dbg

生成可用于创建临时文件的名称,使用 _malloc_dbg 分配内存。

不适用。 若要调用标准 C 函数,请使用 PInvoke。 有关更多信息,请参见 平台调用示例

调试实例可用于通过在调试期间的运行时实例处理的大部分的源代码单步执行另一个 C。 但是, Microsoft 将一些技术所有权的,因此,因此,对于这些实例不提供源代码。 大部分实例属于异常处理或浮点处理的组,但是,某些其他中。 下表列出了这些实例。

不可用的源代码形式的 C 运行时实例

acos, acosf

_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, _chgsignl

_isnan

setjmp

_clear87, _clearfp

_j0

sin

_control87, _controlfp, __control87_2

_j1

sinh

_copysign, _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 中止 实例

C++ 删除 运算符

C 断言 实例

C++ 运算符

有关使用 C++ 运算符的 " debug " 版本的更多信息上表中,请参见 使用从 C++ 的调试堆

请参见

参考

运行时实例按类别

运行时错误检查