跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
dbx 与以下类型的共享库进行交互:
在程序开始执行时隐式装入的库。
使用 dlopen(2) 显式(动态)装入的库。只有在运行期间装入了库以后,此类库的名称才是已知的,所以您无法在使用 debug 或 attach 命令启动调试会话后在这些库中放置断点。
使用 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