C++ 读取符号时gdb seg故障

C++ 读取符号时gdb seg故障,c++,debugging,memory,gdb,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

当试图用程序运行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)
GNU gdb(Ubuntu 7.7-0ubuntu3.1)7.7
版权所有(C)2014免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“x86_64-linux-gnu”。
键入“显示配置”以获取配置详细信息。
有关错误报告说明,请参阅:
.
在线查找GDB手册和其他文档资源,网址为:
.
要获得帮助,请键入“帮助”。
键入“apropos word”以搜索与“word”相关的命令。。。
从/home/user/path/to/program.exe读取符号…分段错误(内核转储)
我怀疑二进制文件可能太大,gdb无法加载到内存中。此错误仅在使用-g(调试标志)编译时发生。以下是二进制文件大小的差异:

编撰

-释放标志:405MB

-调试标志:862MB


关于这个分割错误的其他罪魁祸首有什么想法吗?或者有没有办法增加gdb允许的内存?这对google来说是一个非常具有挑战性的问题。

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

如果gdb在启动过程中出现SEGFULT,那么这是一个gdb错误,您应该能够传递给gdb的可执行文件中没有导致SEGFULT的文件,最坏的情况下,您应该会收到一些错误消息

您可以尝试在gdb下运行gdb(只需执行
gdb--args gdb/home/user/path/to/program.exe
),这对您帮助不大,但可能会让您了解gdb的错误,然后您可以在这里提交一个gdb bug:但只有当您有很好的复制步骤,或者从崩溃的gdb进行回溯时,才值得这么做

重新安装gdb可能会有所帮助,但我对解决这个问题不抱太大希望,除非你改变你安装的gdb的版本,gdb本身是一个很容易安装的程序,所以很难出错

您也可以尝试从git构建gdb,这非常简单,而且bug可能已经修复,从这里开始:


如果你用一个崩溃的gdb的回溯来扩展你的问题,那么其他人可能会向你提供更多关于为什么会崩溃的见解,但责任肯定是你的gdb版本。

我在
Ubuntu 15.04 x86_64
上的
gdb 7.9
也有同样的问题,我只是使用
apt-get-install-gdb
安装了它

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

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

祝你好运

以下是命令:

$ 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

旁注:一些同事建议在gdb上使用gdb(这可能吗?-似乎不起作用)或尝试lldb(现在正在研究)。您使用了什么编译器?您是否尝试过另一个gdb安装?英特尔/composer\u xe\u 2013\u sp1。不,你是说重新安装gdb,还是安装其他版本?我可以试试。是的,或者在另一台机器上试试gdb?我会尝试重新安装gdb,程序编译需要4个多小时,而且我没有在另一台机器上编译调试版本。我也会开始,但会有一段时间。这个问题在最新的gdb更新(7.8.1)中得到了修复。同样的问题,没有用7.8.1解决。在gdb版本7.9.90中,同样的问题在gdb版本7.9.1中得到了修复,而7.12和7.7.1都失败了