GDB在启动时崩溃(内部错误:follow_die_offset)

我在Linux下有一个小型的C ++项目。 当我尝试用gdbdebugging可执行文件时,出现以下错误:

../../gdb/dwarf2read.c:16760: internal-error: follow_die_offset: Assertion 'dwarf2_per_objfile->reading_partial_symbols' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. 

我强烈简化了以下代码的项目,仍然得到相同的错误:

BH:

 #ifndef B_H_ #define B_H_ #include <vector> class B { public: B(); std::vector<double> p; }; #endif /* B_H_ */ 

B.cpp:

 #include "Bh" B::B() {} 

DH:

 #ifndef D_H_ #define D_H_ #include "Eh" class D: public E { public: D(); }; #endif /* D_H_ */ 

D.cpp:

 #include "Dh" D::D() : E() {} 

诶:

 #ifndef E_H_ #define E_H_ #include <functional> class E { public: void set(const std::function<double(void)>& f); std::function<double(void)> e; }; #endif /* E_H_ */ 

E.cpp:

 #include "Eh" void E::set(const std::function<double(void)>& f) { e = f; } 

main.cpp中:

 int main() {} 

生成文件:

 all: Test %.o: %.cpp icpc -c -std=c++11 -g -o $@ $< Test: main.o Do Eo Bo icpc -std=c++11 -o $@ $^ clean: rm -f Do Eo Bo Test main.o .PHONY: all clean 

如果我这样做会发生错误:

 gdb Test 

然后调用

 run 

在gdb CLI中。

我的系统:

打开Suse 12.3,64位

icpc –version:

 icpc (ICC) 15.0.1 20141023 

icpc -v:

 icpc version 15.0.1 (gcc version 4.7.0 compatibility) 

gdb –version:

 GNU gdb (GDB) SUSE (7.5.1-2.1.1) 

gcc –version:

 gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] 

我不知道给定的代码有什么问题,为什么debugging器崩溃。 例如,如果我注释掉类B的构造函数(它什么也不做,应该等同于默认构造函数),错误不会再出现。

我不知道给定的代码有什么问题,为什么调试器崩溃。

你的代码可能没有什么问题,但是你的编译器可能会产生无效的DWARF调试信息,而且你有点旧的GDB肯定有一个处理这个问题的bug。

请注意,您使用旧的GDB使用非常新的icpc ,所以这并不令人惊讶。

您的第一步应该是构建当前的GDB(7.8.1)并检查是否仍然存在问题。

在不太可能的情况下,你应该在GDB bugzilla中报告。

作为解决方法,您也可以尝试使用GCC而不是ICC来构建源代码。

看到这个线程︰https: //software.intel.com/en-us/forums/topic/540685-这似乎是一个问题,在gdb中,固定在7.9。 更新我把gdb升级到了7.9,至少对我来说问题真的消失了。