2011-03-09 74 views
0

当我尝试打印一个绝对有效的结构/变量时,总是遇到gdb崩溃。如果我尝试在gdb中调用另一个函数,它经常会崩溃。我发现只有当代码是C/C++混合时才会发生这种情况。C/C++混合编程:经常使用gdb分段故障

例如,

%> p anotherFunction() 
Segmentation fault 

这里是一个小例子,这是我的典型场景:

example.cc: 

class foo(){ 
    public void bar(); 
}; 

void foo::bar(){ 
    int i=12345; 
    printf("%d", i); 
} 

foo * pfoo; 

extern "C" call_foo(){ 
    pfoo = new foo(); 
    pfoo->bar(); 
} 
的例子

,如果我停在printf和尝试执行“PI” gdb,它会导致崩溃。

请注意,这只是一个示例,请不要在示例中查找错误。这种崩溃发生在任何地方,但有时候一切正常。

我想这是因为我从C代码(本例中为call_foo)调试到C++代码和gdb有切换上下文的问题。

请帮助,如果你有任何想法。这真的影响了我的生产力很多:((...)

顺便说一句,我已经尝试过不同版本的gdb,似乎问题存在于每个版本包括最新的一个,我也尝试purify/valgrind来验证我程序和余did't看到任何错误的方案。

+0

gdb的不同版本已经尝试过最新的一个。 – limi 2011-03-09 11:44:02

+0

然后,我认为你应该获得/编译最新的GDB的调试信息,重现问题,获取堆栈跟踪等(假设你的GDB至少可以自己调试,如果不是你自己的应用程序)并填写一份针对GDB的错误报告。 GDB不应该崩溃,但是你的应用程序会出现错误。 – wilx 2011-03-09 11:51:11

+0

是的,我认为这可能是现在唯一的方法。 – limi 2011-03-09 11:59:24

回答

1

在GDB任何崩溃是在GDB的错误。请把虫子在GDB bugzilla

如果您例如GDB崩溃的多个版本中,问题可能与您的编译器有关(但即使这样GDB也不应该崩溃)