GDB 显示没有堆栈

新手上路,请多包涵

我正在尝试运行一个测试程序来查看 gdb(回溯)如何显示调用堆栈。我有以下程序

#include<iostream>
#include<assert.h>

void fun2()
{
        assert(0);
}
void fun1()
{
        fun2();
}
int main()
{
        fun1();
        return 0;
}

我执行以下操作:

 g++ -g dump.cpp -o out
./out
out: dump.cpp:16: void fun2(): Assertion `0' failed.
Abort (core dumped)
gdb out core.28149

(gdb) bt
No stack. //Why does it show no stack here

我期待它将调用堆栈显示为:

 fun2
fun1
main

编辑:我编辑了代码并编译为 g++ -g -O0 dump.cpp -o out

但我仍然 没有堆栈

void fun2(int num)
{

        int h=23;
        if(h*num>100)
        {
                assert(0);
        }
        else
        {
                cout<<"Hello";
        }
}
void fun1(int num)
{
        {
                fun2(num);
        }
}
int main()
{
        int num;
        cin>>num;
        fun1(num);
        return 0;
}

这次汇编代码向我展示了 fun1、fun2(assert)、main 的单独代码。但我仍然在 gdb 中看到 No Stack

原文由 anurag86 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
1 个回答

从/somepath here读取符号../tmp/out…完成。 “/somepath here/core.30117”不是核心转储:文件格式无法识别

您的核心转储以某种方式损坏。实际上它不是由 gdb 加载的,所以输入 bt 没有效果。

试着检查一下,这些命令应该会给你一些关于核心转储的信息:

  • file core.28149
  • strings core.28149

原文由 ks1322 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题