【问题标题】:C/C++ mixed programming: gdb segmentation fault frequentlyC/C++混合编程:gdb分段错误频繁
【发布时间】: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 不应该崩溃,但是您自己的应用程序会出现错误。
  • 是的,我认为这可能是现在唯一的方法了。

标签: c++ c crash gdb


【解决方案1】:

GDB 中的任何崩溃都是 GDB 中的错误。请将 bug 提交到 GDB bugzilla

如果多个版本的 GDB 在您的示例中崩溃,则问题可能出在您的编译器上(但即使这样 GDB 也不应该崩溃)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2016-01-12
    • 2017-01-11
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多