读取符号时gdb seg出错

时间:2014-06-03 20:14:33

标签: c++ debugging memory gdb

尝试使用程序运行gdb时,会在读取符号时出错。

当我跑步时:

gdb /home/user/path/to/program.exe

我明白了:

GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
Copyright (C) 2014 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 "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/user/path/to/program.exe...Segmentation fault (core dumped)

我怀疑二进制文件可能太大而无法将gdb加载到内存中。只有在使用-g(调试标志)进行编译时才会出现此错误。这是二进制文件大小的差异:

编译

-release flag: 405 MB

-debug flag: 862 MB

关于此细分错误的其他罪魁祸首的任何想法?或者有没有办法增加gdb允许的内存?这对谷歌来说是一个非常具有挑战性的问题。

2 个答案:

答案 0 :(得分:4)

我在gdb 7.9 Ubuntu 15.04 x86_64遇到了同样的问题,我只是使用apt-get install gdb安装了该问题。

我通过编译和安装以前的版本解决了这个问题:gdb 7.5.1

我必须下载一个库(我发现here),我还必须使用一些参数运行./configure(我发现here)。其他一切都很简单。

祝你好运。

以下是命令:

$ cd
$ sudo apt-get install libncurses5-dev
$ wget ftp://sourceware.org/pub/gdb/releases/gdb-7.5.1.tar.gz
$ tar zxf gdb-7.5.1.tar.gz
$ cd gdb-7.5.1
$ sudo ./configure --disable-werror
$ sudo make
$ sudo make install

答案 1 :(得分:2)

如果你在没有-g标志的情况下进行编译,那么你就不会在可执行文件中包含调试信息,因此当gdb加载时,加载的信息要少得多。

如果gdb在启动期间出现段错误,那么这是一个gdb错误,没有可执行文件,你应该能够传递给应该导致段错误的gdb,最坏的情况是你应该得到一些错误信息。

你可以尝试在gdb下运行gdb,(只做gdb --args gdb /home/user/path/to/program.exe)这对你没什么帮助,但可能会对gdb的问题有所了解,你可以在这里提出一个gdb错误:{{但是,如果你有很好的重现步骤,或者从崩溃的gdb中回溯,那么这只值得做。

重新安装gdb可能会有所帮助,但我不太希望解决问题,除非你改变你安装的gdb版本,gdb本身是一个非常容易安装的程序,所以很难搞错。 / p>

您也可以尝试从git构建gdb,它非常简单,并且该错误可能已经修复,从这里开始:https://sourceware.org/bugzilla/enter_bug.cgi?product=gdb

如果你使用来自崩溃的gdb的回溯扩展你的问题,那么其他人可能能够让你更深入地了解崩溃的原因,但是责任肯定是你的gdb版本。