【问题标题】:gdb seg faults when reading symbols读取符号时出现 gdb 段错误
【发布时间】:2014-06-03 20:14:32
【问题描述】:

当尝试使用程序运行 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允许的内存?这对谷歌来说是一个非常具有挑战性的问题。

【问题讨论】:

  • 旁注:一些办公室同事建议在 gdb 上使用 gdb 的解决方案(这甚至可能吗? - 似乎不起作用)或尝试 lldb 代替(现在研究这个)。跨度>
  • 你用的是什么编译器?您是否尝试过另一个 gdb 安装?
  • 英特尔/composer_xe_2013_sp1。不,您的意思是重新安装 gdb,还是安装其他版本?我可以试试。
  • 是的,或者在另一台机器上尝试 gdb ?
  • 我会尝试重新安装 gdb,该程序需要 4 个多小时才能编译,而且我没有在另一台机器上编译的调试版本。我也会开始做,但需要一段时间。

标签: c++ debugging memory gdb


【解决方案1】:

我在Ubuntu 15.04 x86_64 上遇到了与gdb 7.9 相同的问题,我只是使用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

【讨论】:

  • 对我来说 7.9.1 有效,而 7.12 和 7.7.1 失败了
【解决方案2】:

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

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

您可以尝试在 gdb 下运行 gdb,(只需执行 gdb --args gdb /home/user/path/to/program.exe)这对您没有多大帮助,但可能会帮助您了解 gdb 的问题,然后您可以在此处提交 gdb 错误:https://sourceware.org/bugzilla/enter_bug.cgi?product=gdb 但是仅当您有良好的重现步骤或从崩溃的 gdb 中进行回溯时,才值得这样做。

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

你也可以尝试从 git 构建 gdb,很简单,而且 bug 可能已经修复,从这里开始:http://www.gnu.org/software/gdb/current/

如果您使用崩溃的 gdb 的回溯来扩展您的问题,那么其他人可能会为您提供更多关于崩溃原因的见解,但问题肯定在于您的 gdb 版本。

【讨论】:

  • 该问题已在最新的 gdb 更新 (7.8.1) 中修复。
  • 同样的问题,7.8.1 未修复
  • gdb 7.9 有同样的问题
  • 已在 gdb 版本 7.9.90 中修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多