无法在核心文件中找到通用寄存器

时间:2013-02-25 06:38:48

标签: gdb arm shared-libraries

当我尝试调试核心文件时,我收到以下错误。如何解决这个问题。 就在几天前,它运作良好。 我尝试使用root provileges运行“/ sbin / ldconfig”。代码编译为:

g++ -fPIC -ggdb

我的可执行文件是32位二进制文​​件:

$ file appl

ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked 
(uses shared libs), not stripped.


user@ubu:/mnt/hgfs/share$ gdb appl  core.11_416


GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /mnt/hgfs/share/appl...done.

warning: Couldn't find general-purpose registers in core file.

warning: Could not load shared library symbols for 9 libraries, e.g. /lib/libdl.so.2.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Core was generated by `appl'.


warning: Couldn't find general-purpose registers in core file.
#0  <unavailable> in ?? ()
(gdb) i shared
From        To          Syms Read   Shared Object Library
                    No          /lib/libdl.so.2
                    No          /opt/lib/libappl.so
                    No          /lib/librt.so.1
                    No          /usr/lib/libstdc++.so.6
                    No          /lib/libm.so.6
                    No          /lib/libgcc_s.so.1
                    No          /lib/libc.so.6
                    No          /lib/libpthread.so.0
                    No          /lib/ld-linux.so.3
(gdb) 
(gdb) show solib-search-path
The search path for loading non-absolute shared library symbol files is .
(gdb) show sysroot
The current system root is "".
(gdb) 
(gdb) show archi
The target architecture is set automatically (currently i386)

我正在使用运行ubuntu 12.04的VMware

user@ubu:~$ uname -a
Linux ubu 3.2.0-36-generic #57-Ubuntu SMP Tue Jan 8 21:41:24 UTC 2013 i686 i686 i386 GNU/Linux
user@ubu:~$ 

编辑:2013年3月20日

@SCOTT:谢谢你的回复。我会尝试一下。相同的设置在早期工作正常,我能够使用GDB进行调试。一旦我做了“apt-get update”,从那时起GDB就抱怨上述错误。我可以看出的一个区别是,当GDB正在开展工作的时候,显示出来了:

This GDB was configured as "i486-linux-gnu".

现在更新后的版本显示:

This GDB was configured as "i686-linux-gnu"

这是我能看到或理解的所有差异。

我使用的ARM工具链没有提供的GDB。 g ++是为英特尔编译的。我现在也使用相同的g ++来构建可执行文件。

$ file g++
g++: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped

我使用的交叉编译器可执行文件如下所示。但是当我收到此错误时,我使用的是正常的gdb(安装在Ubuntu上)命令,它位于“/ usr / bin / gdb”:

user@ubu:/opt/cs/bin$ ls
arm-none-linux-gnueabi-g++
arm-none-linux-gnueabi-gdb

... etc ...

我在这里使用错误的GDB。如果它是错误的GDB,为什么它早点工作为什么不呢?我应该使用这个arm-none-linux-gnueabi-GDB来调试ARM交叉编译的应用程序,它是用以下代码编译的:

arm-none-linux-gnueabi-g++  appl.cpp  -o appl


user@ubu:~$ which gdb
/usr/bin/gdb

2 个答案:

答案 0 :(得分:0)

您使用的是错误的gdb。抓住Linaro ARM toolchain tarball,解压缩并运行:

$ gcc-linaro-arm-linux-gnueabihf-4.7-2013.02-01-20130221_linux/bin/arm-linux-gnueabihf-gdb appl  core.11_416
<...>
This GDB was configured as "--host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf".
<...>

注意您正在使用的gdb显示“此GDB配置为” i686-linux-gnu “”。你想要一个显示“ - host = i686-build_pc-linux-gnu --target = arm-linux-gnueabihf”(或目标中类似的ARM Linux三元组)。

通常人们不会将gcc目标 arm-linux-gnueabihf 与gdb目标 i686-linux-gnu 混淆,因为编译器,链接器和调试器命令会一切都以相同的前缀开头,即 arm-linux-gnueabihf- {gcc,gdb,ld,gas} 等。你是如何最终得到你的特定gcc和gdb组合的?

答案 1 :(得分:0)

我在交叉编译工具链中编译了GDB。它出现在build目录的bin目录之一中。您可以检查类似的gdb