0

关于 dbx 调试器调试的核心文件的任何想法。我不明白为什么会生成这个核心文件。请帮助我

For information about new features see `help changes'
To remove this message, put `dbxenv suppress_startup_message 7.6' in your .dbxrc
Reading mhost.new
core file header read successfully
Reading ld.so.1
Reading librt.so.1
Reading libclntsh.so.9.0
Reading libm.so.2
Reading libnsl.so.1
Reading libsocket.so.1
Reading libgen.so.1
Reading libdl.so.1
Reading libthread.so.1
Reading libc.so.1
Reading libaio.so.1
Reading libmd.so.1
Reading libwtc9.so
Reading libsched.so.1
Reading libc_psr.so.1
WARNING!!
A loadobject was found with an unexpected checksum value.
See `help core mismatch' for details, and run `proc -map'
to see what checksum values were expected and found.
dbx: warning: Some symbolic information might be incorrect.
t@1 (l@1) program terminated by signal SEGV (no mapping at the fault address)
0xff3be704: elf_find_sym+0x0114:        ldsb     [%l0 + %l4], %o2
(dbx) where
current thread: t@1
=>[1] elf_find_sym(0xffbfbbd8, 0xffbfbc68, 0xffbfbc64, 0xf194, 0xfe5986d2, 0xff3f0358), at 0xff3be704
  [2] _lookup_sym(0xff3f7360, 0xffbfbbd8, 0xffbfbc68, 0xffbfbc64, 0x0, 0xff3f0358), at 0xff3bbb7c
  [3] lookup_sym(0xffbfbc6c, 0xffbfbc68, 0xffbfbc64, 0xff3f7360, 0x1, 0xfe5986d2), at 0xff3bbe6c
  [4] elf_bndr(0x84d, 0xff391d38, 0xfe5c2124, 0xfe5986d2, 0xff3f42f0, 0x0), at 0xff3d207c
  [5] elf_rtbndr(0xfe5c2124, 0xfe6c3800, 0x1c00, 0x0, 0x0, 0x0), at 0xff3b84fc
  [6] 0xfe6bf3c4(0x0, 0x1cc4, 0xfe6c3800, 0xfe6c5180, 0xff352a00, 0x1c00), at 0xfe6bf3c4
  [7] _exithandle(0xfe6c5400, 0xfe6c3800, 0x1c00, 0x0, 0x0, 0x0), at 0xfe5c2124
  [8] exit(0x0, 0xffbfbe4c, 0xffbfbeb4, 0x139800, 0xff350100, 0x0), at 0xfe5b0550
4

2 回答 2

0

适当的堆栈将有助于找出可能导致崩溃的原因。假设此内核是在 Solaris 平台上生成的,并且您正在分析在不同系统上生成的内核。

在这种情况下,最好从生成核心的环境中收集所有依赖库。在本地提取它们,并使用 dbx 中的 pathmap 子命令映射本地目录。

例如,如果一个库存在于 /home/app/lib 下的故障环境中,并且在分析核心的本地环境中位于 /home/user/app/lib (dbx) pathmap /home/app/lib /home /用户/应用程序/库

如果有多个这样的路径,则需要将所有目录映射到各自的本地目录。映射完所有路径后,您可以运行以下命令

(dbx) debug executable-name corefile-name

或者你也可以试试

  • mdb 调试器
  • 核心文件上的 pstack 命令。
于 2013-06-01T18:14:02.850 回答
0

SEGV表示访问未定义的内存。它发生在 elf_find_sym 中。如果包含调试符号,则转储将指示行号。

使用gcc -g <files>... 包含调试符号和行号信息。

于 2010-02-12T06:52:43.673 回答