【发布时间】:2011-03-09 11:35:25
【问题描述】:
当我尝试打印一个绝对有效的结构/变量时,我总是遇到 gdb 崩溃。如果我试图在 gdb 中调用另一个函数,它经常会崩溃。我发现只有当代码是 C/C++ 混合时才会发生这种情况。
例如,
%> 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 处停止并尝试在 gdb 中执行“p i”,则会导致崩溃。
请注意,这只是一个示例,请不要在示例中寻找错误。这种崩溃无处不在,但有时一切正常。
我猜这是因为我从 C 代码(本例中为 call_foo)调试到 C++ 代码,而 gdb 在切换上下文时遇到了问题。
如果您有任何想法,请提供帮助。这真的很影响我的工作效率:(....
顺便说一句,我已经尝试过不同版本的 gdb。似乎每个版本都存在问题,包括最新版本。而且我还尝试了 purify/valgrind 来验证我的程序,我没有看到程序有任何错误。
【问题讨论】:
-
不同版本的 gdb 已经尝试过,即使是最新版本。
-
那么我认为您应该获取/编译带有调试信息的最新 GDB,重现问题,获取堆栈跟踪等(假设您的 GDB 至少可以调试自己,如果不是您自己的应用程序)并填写对 GDB 的错误报告。 GDB 不应该崩溃,但是您自己的应用程序会出现错误。
-
是的,我认为这可能是现在唯一的方法了。