dbx点滴-(1)
断断续续的看过dbx手册的一些章节,虽然大部分的内容不常用到,但是对某些特定情形的调试还是相当有用。本博的目的就是把一些个人认为有用的东西摘抄出来,方便查询。
1>
要消除库问题并用 dbx 调试 “不匹配”的核心文件,您可以执行以下操作:
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.so 到 libc.so.1 的链接, 只要确保 libc.so.1 可用。)
注意事项
调试不匹配的核心文件时应注意:
■ pathmap 命令不能识别 “/”路径映射,因此不能使用以下命令:
pathmap / /net/core-host
■ pathmap 命令的单参数模式不能与加载对象路径名同时使用,因此请使用二元模式
from-path to-path。
■ 如果 dbx 主机使用的 Solaris 操作环境版本与核心主机相同或更新,那么调试核心文件时效果可能会更好,虽然这并不总是必要的。可能需要的系统库是:
■ 对于运行时链接程序:
/usr/lib/ld.so.1
/usr/lib/librtld_db.so.1
/usr/lib/64/ld.so.1
/usr/lib/64/librtld_db.so.1
■ 对于线程库,取决于您所使用的 libthread 执行:
/usr/lib/libthread_db.so.1
/usr/lib/64/libthread_db.so.1
/usr/lib/lwp/libthread_db.so.1
/usr/lib/lwp/64/libthread_db.so.1
/usr/lib/lwp 文件仅适用于在 Solaris 8 操作环境中运行 dbx 的情况, 并且仅在您
使用交替 libthread 库时适用。
如果 dbx 在支持 64 位的 Solaris OS 版本上运行,则需要 xxx_db.so 库的 64 位版
本,因为这些系统库是作为 dbx 的一部分而不是目标程序的一部分装入和使用的。
ld.so.1 库是核心文件映像的一部分,与 libc.so 或其他任何库一样,因此需要与
创建该核心文件的程序相匹配的 32 位 ld.so.1 库或 64 位 ld.so.1 库。
■ 如果正在查看来自某个线程程序的核心文件,并且 where 命令未显示栈,请尝试使用
lwp 命令。例如:
(dbx) where
current thread: t@0
[1] 0x0(), at 0xffffffff
(dbx) lwps
o>l@1 signal SIGSEGV in _sigfillset()
(dbx) lwp l@1
(dbx) where
=>[1] _sigfillset(), line 2 in "lo.c"
[2] _liblwp_init(0xff36291c, 0xff2f9740, ...
[3] _init(0x0, 0xff3e2658, 0x1, ...
...
缺少线程栈表明 thread_db.so.1 有问题,因此,需要尝试从核心主机中复制适当
的 libthread_db.so.1 库。
2>
启动加载配置文件的顺序:
dbx -s可以指定加载的初始化配置文件。
寻找.dbxrc 的顺序:
/installation_directory/lib ->
当前目录./.dbxrc-> $HOME: $HOME/.dbxrc
在 Solaris 平台上,默认 installation_directory 为
/opt/SUNWspro ;在 Linux 平台上,默认 installation_directory 为
/opt/sun/sun/sunstudio10u1
3>
创建 .dbxrc 文件:
(dbx) help .dbxrc>$HOME/.dbxrc







