Sun Studio 12:使用 dbx 调试程序

运行时检查限制

运行时检查具有以下限制。

具有更多符号和调试信息时工作效果会更好

访问检查需要装入对象的某些符号信息。当装入对象被完全剥离时,运行时检查可能无法捕获所有的错误。从未初始化的内存错误进行读取可能会出错,因而会被抑制。可以使用 unsuppress rui 命令覆盖抑制。要保留装入对象的符合表,请在剥离装入对象时使用 -x 选项。

SIGSEGVSIGALTSTACK 信号在 x86 平台上受限制

运行时检查运用内存访问指令进行访问检查。这些指令由 SIGSEGV 处理程序在运行时处理。由于运行时检查需要其自己的 SIGSEGV 处理程序和信号备用栈,所以尝试安装 SIGSEGV 处理程序或 SIGALTSTACK 处理程序会导致发生 EINVAL 错误或忽略该尝试。

SIGSEGV 处理程序的调用不能被嵌套。如果嵌套,则会导致 terminating signal 11 SEGSEGV 错误。如果收到此错误,请使用 rtc skippatch 命令跳过受影响函数的检测过程。

当 8 MB 的所有现有代码中具有足够的补丁区域时工作效果会更好(仅限 SPARC 平台)。

如果 8 MB 的所有现有代码中没有足够的补丁区域,则可能会引发两个问题

如果上述任一条件适用于您的程序,并且在启用访问检查时程序的行为方式开始有所不同,则可能是陷阱处理程序限制影响到您的程序。要变通克服这些限制,您可以执行以下操作: