c – GDB显示无堆栈

我试图运行一个测试程序,看看gdb(backtrace)如何显示调用堆栈.我有以下程序

#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中看到没有堆栈

最佳答案

Reading symbols from /somepath here../tmp/out…done. “/somepath
here/core.30117” is not a core dump: File format not recognized

你的核心转储以某种方式被破坏了.实际上它没有被gdb加载所以输入bt没有效果.

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

>文件core.28149
>字符串core.28149

点赞