跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
check 命令用于启用检查内存访问、泄漏或使用,并输出运行时检查 (runtime checking, RTC) 的当前状态。仅在本地模式中有效。
由此命令启用的运行时检查功能可由 debug 命令重置为其初始状态。
check -access
打开访问检查。RTC 报告下列错误:
错误释放
重复释放
未对齐释放
未对齐读
未对齐写
内存不足
从数组越界内存中读
从未分配的内存中读
从未初始化的内存中读
写入到数组越界内存
写入到只读内存
写入到未分配内存
缺省行为是在检测到每个访问错误后停止进程,可使用 rtc_auto_continue dbx 环境变量对此进行更改。如果设置为 on,访问错误将记录到一个文件(文件名由 dbx 环境变量 rtc_error_log_file_name 控制)中。请参见dbxenv 命令。
缺省情况下,每个独特访问错误只在第一次发生时进行报告。可使用 dbx 环境变量 rtc_auto_suppress(此变量的缺省设置为 on)更改此行为。请参见dbxenv 命令。
check -leaks [-frames n] [-match m]
打开泄漏检查。RTC 报告下列错误:
可能的内存泄漏-指针仅指向块中央
可能的内存泄漏-仅寄存器中存在指向块的指针
内存泄漏 - 没有指针指向块
启用了泄漏检查时,程序退出时会自动生成泄漏报告。届时将报告包括可能的泄漏在内的所有泄漏。缺省情况下,会生成简短报告(由 dbx 环境变量 rtc_mel_at_exit 控制)。但可以随时获取泄漏报告(请参见showleaks 命令)。
-frames n 表示在报告泄漏时,最多显示 n 个不同的堆栈帧。-matchm 用于合并泄漏;如果两个或更多泄漏分配时的调用堆栈与 n 帧匹配,则在一个合并泄漏报告中报告这些泄漏。
n 的缺省值为 8 或 m 的值(取较大值)。n 的最大值为 16。m 在 C++ 中的缺省值为 3,在其他程序语言中为 2。
check -memuse [-frames n] [-match m]
-memuse 选项的行为与 -leaks 选项类似,还会启用在程序退出时生成 "blocks in use" 报告 (biu)。缺省情况下,会生成简短的使用的块报告(由 dbx 环境变量 rtc_biu_at_exit 控制)。在程序执行过程中,可以随时查看程序中内存的分配位置(请参见showmemuse 命令)。
-frames n 表示在报告内存使用和泄漏时,最多将显示 n 个不同的堆栈帧。-match m 用于合并这些报告;如果两个或更多泄漏分配时的调用堆栈与 m 帧匹配,则在一个合并内存泄漏报告中报告这些泄漏。
n 的缺省值为 8 或 m 的值(取较大值)。n 的最大值为 16。m 在 C++ 中的缺省值为 3,在其他程序语言中为 2。另请参见 check -leaks。
check -all [-frames n] [-match m]
等效于 check -access 和 check -memuse [-frames n] [-match m]
dbx 环境变量 rtc_biu_at_exit 的值不随 check -all 变化,因此在缺省情况下,退出时不生成内存使用报告。有关环境变量 rtc_biu_at_exit 的说明,请参见dbx 命令。
check [functions] [files] [loadobjects]
等效于 functions、files 和 loadobjects 中的 check -all、suppress all 或 unsuppress all
其中:
functions 是一个或多个函数名。
files 是一个或多个文件名。
loadobjects 是一个或多个装入对象名。
您可使用此命令将运行时检查用于需要的地方。
注 - 为了检测所有错误,RTC 不要求使用 -g 编译程序。但是,有时为了保证准确检测某些错误(通常是从未初始化的内存中读取),需要使用符号 (-g) 信息。因此,如果未提供符号信息,某些错误(a.out 的 rui,共享库的 rui + aib + air)会被禁止。可通过使用 suppress 和 unsuppress 更改此行为。