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.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

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

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

动态链接程序

链接映射

启动序列和 .init

过程链接表

修复并继续

在共享库中设置断点

在显式装入的库中设置断点

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

动态链接程序

动态链接程序(亦称 rtld、运行时 ldld.so)安排将共享对象(装入对象)引入到正在执行的程序中。rtld 在两个主要区域处于活动状态:

dbx 使用术语装入对象 来表示共享对象 (.so) 或可执行文件 (a.out)。可以使用 loadobject 命令(请参见loadobject 命令)列出和管理来自装入对象的符号信息。

链接映射

动态链接程序在称为链接映射的列表中保留有所有装入对象的列表。链接映射保留在正被调试程序的内存中,可通过 librtld_db.so 这一供调试器使用的特殊系统库来间接访问它。

启动序列和 .init

.init 段是一段属于共享对象的代码,装入共享对象时该代码将执行。例如,.init 段由 C++ 运行时系统用于调用 .so 中的所有静态初始化函数。

动态链接程序会先在所有共享对象中映射,从而将它们置于链接映射中。然后,动态链接程序将遍历链接映射并为每个共享对象执行 .init 段。syncrtld 事件(请参见syncrtld)发生在这两个阶段之间。

过程链接表

过程链接表(Procedure linkage table,PLT)是 rtld 为了实现跨共享对象边界调用所使用的结构。例如,对 printf 的调用便会通过这个间接表。可以在通用及处理器特定 SVR4 ABI 参考手册中找到对这一过程的详细说明。

要使 dbx 能够在各 PLT 中处理 stepnext 命令,它必须记录每个装入对象的 PLT 表。表信息的获得与 rtld 握手同时进行。