check 命令用于启用检查内存访问、泄漏或使用,并输出运行时检查 (runtime checking, RTC) 的当前状态。仅在本地模式中有效。
由此命令启用的运行时检查功能可由 debug 命令重置为其初始状态。
本节提供有关 check 命令选项的信息。
check [functions] [files] [loadobjects]
等效于 functions、files 和 loadobjects 中的 check –all、suppress all 或 unsuppress all
其中:
functions 是一个或多个函数名。
files 是一个或多个文件名。
loadobjects 是一个或多个装入对象名。
您可使用此命令将运行时检查用于需要的地方。
–access 选项启用检查。RTC 报告下列错误:
错误释放
重复释放
未对齐释放
未对齐读
未对齐写
内存不足
从数组越界内存中读
从未分配的内存中读
从未初始化的内存中读
写入到数组越界内存
写入到只读内存
写入到未分配内存
缺省行为是在检测到每个访问错误之后停止进程,可以使用 rtc_auto_continue dbxenv 变量更改此行为。如果设置为 on,则访问错误将记录到文件。日志文件名由 dbxenv 变量 rtc_error_log_file_name 控制。
缺省情况下,每个独特访问错误只在第一次 发生时进行报告。可以使用 dbxenv 变量 rtc_auto_suppress 更改此行为。此变量的缺省设置为 on。
–leaks 选项的语法如下:
check –leaks [–frames n] [–match m]
启用泄漏检查。RTC 报告下列错误:
可能发生内存泄漏-唯一指针指向块中间位置
可能发生内存泄漏-指向块的指针仅存在于寄存器中
内存泄漏-无指向块的指针
启用泄漏检查之后,将在程序退出时自动生成泄漏报告。届时将报告包括可能的泄漏在内的所有泄漏。缺省情况下,会生成非详细报告,可以通过 dbxenv 变量 rtc_mel_at_exit 更改此行为。但可以随时获取泄漏报告(请参见showleaks 命令)。
–frames n 表示在报告泄漏时最多显示 n 个不同的堆栈帧。–match m 用于组合泄漏;如果两个或更多泄漏分配时的调用堆栈与 n 帧匹配,则在一个合并泄漏报告中报告这些泄漏。
n 的缺省值为 8 或 m 的值(取较大值)。n 的最大值是 16。m 的缺省值是 8。
–memuse 选项的语法为:
check –memuse [–frames n] [–match m]
–memuse 选项与 –leaks 选项的作用类似,同时还可在程序退出时启用使用的块报告 (biu)。缺省情况下,会生成非详细的使用的块报告,可以通过 dbxenv 变量 rtc_biu_at_exit 更改此行为。在程序执行期间,您随时可以查看程序中已分配的内存位置(请参见showmemuse 命令)。
–frames n 表示报告内存使用和泄漏时最多显示 n 个不同的堆栈帧。使用 –match m 可组合这些报告。如果两个或更多泄漏分配时的调用堆栈与 m 帧匹配,则在一个合并的内存泄漏报告中报告这些泄漏。
n 的缺省值为 8 或 m 的值,以较大者为准。n 的最大值为 16。m 的缺省值是 8。
–all 选项的语法为:
check –all [–frames n] [–match m]
等效于:
check –access 和 check –memuse [–frames n] [–match m]
dbxenv 变量 rtc_biu_at_exit 的值不随 check –all 变化,因此在缺省情况下,退出时不生成内存使用报告。有关 rtc_biu_at_exit 环境变量的说明,请参见dbx 命令。