Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

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

dbx 会自动检测发生了 dlopen() 还是 dlclose(),然后装入装入对象的符号表。使用 dlopen() 装入共享对象后,即可在其中设置断点,然后像对待程序的任何部分一样进行调试。

如果共享对象是使用 dlclose() 卸下的,dbx 会记住其中设置的断点,并在使用 dlopen() 再次装入该共享对象时替换这些断点,即便应用程序再次运行也是如此。

但如果要在其中设置断点,或导航其函数和源代码,就不必等待使用 dlopen() 装入共享对象。如果知道正被调试的程序将使用 dlopen() 装入的共享对象的名称,可以使用 loadobject -load 命令请求 dbx 预装其符号表:

loadobject -load /usr/java1.1/lib/libjava_g.so

现在便可在此装入对象被 dlopen() 装入前在其中导航模块和函数及设置断点。装入对象由程序装入后,dbx 即会自动设置断点。

    在动态链接库中设置断点受以下限制:

  • 使用 dlopen() 装入的过滤器库中的第一个函数被调用后,才能在该库中设置断点。

  • dlopen() 装入库后,名为 _init() 的初始化例程便会被调用。此例程可能会调用库中的其他例程。在此初始化完成之前,dbx 不能在已装入的库中设置断点。因此,您无法让 dbxdlopen() 装入的库中的 _init() 处停止。