Sun Studio 12:使用 dbx 调试程序

调试不匹配的核心转储文件

有时核心转储文件在一个系统(核心主机)上创建,而您想在另一台机器(dbx 主机)上装入该核心转储文件。但这样做可能会引起两个与库有关的问题:

用户库和系统库可随着修补程序以及主要的 Solaris 操作环境升级而改变,因此如果在收集核心转储文件之后但在核心转储文件上运行 dbx 之前安装修补程序,此问题仍会出现在同一台主机上。

当装入“不匹配”的核心转储文件时,dbx 可能会显示以下一条或多条错误消息:


dbx: core file read error: address 0xff3dd1bc not available
dbx: warning: could not initialize librtld_db.so.1 -- trying libDP_rtld_db.so
dbx: cannot get thread info for 1 -- generic libthread_db.so error
dbx: attempt to fetch registers failed - stack corrupted
dbx: read of registers from (0xff363430) failed -- debugger service failed

消除共享库问题

Procedure消除库问题和调试“不匹配的”核心转储文件

  1. dbx 环境变量 core_lo_pathmap 设置为 on

  2. 使用 pathmap 命令告知 dbx 核心转储文件的正确库的位置。

  3. 使用 debug 命令装入程序和核心转储文件。

    例如,假定核心主机的根分区已通过 NFS 导出,并且可以通过 dbx 主机上的 /net/core-host/ 访问,应使用以下命令装入 prog 程序和 prog.core 核心转储文件来进行调试:


    (dbx) dbxenv core_lo_pathmap on
    (dbx) pathmap /usr /net/core-host/usr
    (dbx) pathmap /appstuff /net/core-host/appstuff
    (dbx) debug prog prog.core
    

    如果没有导出核心主机的根分区,则必须手动复制这些库。不需要重新创建符号链接。(例如,您不必建立从 libc.solibc.so.1 的链接,只要确保 libc.so.1 可用。)

注意事项

调试不匹配的核心转储文件时应注意: