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

退出打印视图

更新时间: 2015 年 1 月
 
 

在动态装入的库中设置断点

    dbx 与以下类型的共享库进行交互:

  • 在程序开始执行时隐式装入的库。

  • 使用 dlopen(2) 显式(动态)装入的库。只有在运行期间装入了库以后,此类库的名称才是已知的,所以您无法在使用 debugattach 命令启动调试会话后在这些库中放置断点。

  • 使用 dlopen(2) 显式装入的过滤器库。只有在装入库且调用其中的第一个函数之后,此类库的名称才是已知的。

    可以采用以下两种方式在显式(动态)装入的库中设置断点:

  • 如果有一个包含函数 myfunc() 的库(例如 mylibrary.so),可以将此库的符号表预装入 dbx 中并在此函数上设置断点,如下所示:

    (dbx) loadobject -load fullpathto/mylibrary.so
    (dbx) stop in myfunc
  • 采用更简单的方式,在 dbx 下运行程序直至完成。dbx 将记录并记住使用 dlopen(2) 装入的所有共享库,即使这些库已通过 dlclose() 关闭。所以在第一次运行程序之后,您将能够成功设置断点。

    (dbx) run
    execution completed, exit code is 0
    (dbx) loadobject -list
    u   myprogram (primary)
    u   /lib/libc.so.1
    u p /platform/sun4u-us3/lib/libc_psr.so.1
    u   fullpathto/mylibrary.so
    (dbx) stop in myfunc