JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

9.  使用运行时检查

运行时检查功能

何时使用运行时检查

运行时检查要求

使用运行时检查

启用内存使用和内存泄漏检查

启用内存访问检查

启用所有运行时检查

关闭运行时检查

运行程序

使用访问检查

理解内存访问错误报告

内存访问错误

使用内存泄漏检查

检测内存泄漏错误

可能的泄漏

检查泄漏

理解内存泄漏报告

生成泄漏报告

合并泄漏

修复内存泄漏

利用内存使用检查

抑制错误

抑制的类型

按作用域和类型抑制

抑制上一错误

限制报告的错误数

抑制错误示例

缺省抑制

使用抑制来管理错误

对子进程使用运行时检查

对连接的进程使用运行时检查

在运行 Solaris 的系统中

在运行 Linux 的系统中

结合使用修复并继续功能与运行时检查

运行时检查应用编程接口

在批处理模式下使用运行时检查

bcheck 语法

bcheck 示例

直接在 dbx 中启用批处理模式

疑难解答提示

运行时检查限制

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

SIGSEGVSIGALTSTACK 信号在 x86 平台上受限制

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

运行时检查错误

访问错误

错误释放 (baf) 错误

重复释放 (duf) 错误

未对齐释放 (maf) 错误

未对齐读 (mar) 错误

未对齐写 (maw) 错误

内存不足 (oom) 错误

从数组越界中读 (rob) 错误

从未分配的内存中读 (rua) 错误

从未初始化的内存中读 (rui) 错误

写入到数组越界内存 (wob) 错误

写入到只读内存 (wro) 错误

写入到未分配内存 (wua) 错误

内存泄漏错误

地址位于块内 (aib) 错误

地址位于寄存器内 (air) 错误

内存泄漏 (mel) 错误

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

对连接的进程使用运行时检查

除非因已分配受影响的内存而无法检测到 RUI,否则可以对连接的进程使用运行时检查。

在运行 Solaris 的系统中

在运行 Solaris 操作系统的系统中,进程启动时必须预装入 rtcaudit.so。如果连接的进程是 64 位进程,请使用相应的 64 位 rtcaudit.so,该文件位于:

/installation_directory/lib/dbx/sparcv9/runtime/rtcaudit.so(64 位 SPARC 平台)

/installation_directory/lib/dbx/amd64/runtime/rtcaudit.so(AMD64 平台)

/installation_directory/lib/dbx/runtime/rtcaudit.so(32 位平台)

预装入 rtcaudit.so

% setenv LD_AUDIT path-to-rtcaudit/rtcaudit.so

LD_AUDIT 环境变量设置为仅在需要时预装入 rtcaudit.so,而不要一直将其保持为装入状态。例如:

% setenv LD_AUDIT...
% start-your-application
% unsetenv LD_AUDIT

连接到进程后,便可以启用运行时检查。

如果要连接的程序从某一其他程序派生或执行,则必须为主程序(派生者)设置 LD_AUDIT。在派生和执行中会继承 LD_AUDIT 的设置。如果 32 位程序派生或执行 64 位程序,或 64 位程序派生或执行 32 位程序,则该解决方案将不起作用。

LC_AUDIT 环境变量既适用于 32 位程序也适用于 64 位程序,这导致很难为运行 64 位程序的 32 位程序或运行 32 位程序的 64 位程序选择正确的库。某些版本的 Solaris 操作系统支持 LD_AUDIT_32 环境变量和 LD_AUDIT_64 环境变量(它们分别仅影响 32 位程序和 64 位程序)。请参见针对您所运行 Solaris 版本的《链接程序和库指南》,确定是否支持这些变量。

在运行 Linux 的系统中

在运行 Linux 操作系统的系统中,进程启动时必须预装入 librtc.so。如果连接的进程是在 AMD64 处理器中运行的 64 位进程,请使用相应的 64 位 librtc.so,该文件位于:

/installation_directory/lib/dbx/amd64/runtime/librtc.so(64 位 AMD64 平台)

/installation_directory/lib/dbx/runtime/librtc.so(32 位平台)

预装入 librtc.so

% setenv LD_PRELOAD path-to-rtcaudit/librtc.so

LD_PRELOAD 环境变量设置为仅在需要时预装入 librtc.so,而不要一直将其保持为装入状态。例如:

% setenv LD_PRELOAD...
% start-your-application
% unsetenv LD_PRELOAD

连接到进程后,便可以启用运行时检查。

如果要连接的程序从某一其他程序派生或执行,则必须为主程序(派生者)设置 LD_PRELOAD。在派生和执行中会继承 LD_PRELOAD 的设置。如果 32 位程序派生或执行 64 位程序,或 64 位程序派生或执行 32 位程序,则该解决方案将不起作用。

LC_PRELOAD 环境变量既适用于 32 位程序也适用于 64 位程序,这导致很难为运行 64 位程序的 32 位程序或运行 32 位程序的 64 位程序选择正确的库。某些版本的 Linux 支持 LD_PRELOAD_32 环境变量和 LD_PRELOAD_64 环境变量(它们分别仅影响 32 位程序和 64 位程序)。请参见针对您所运行 Linux 版本的《链接程序和库指南》,确定是否支持这些变量。