簡體   English   中英

GDB顯示無堆棧

[英]GDB shows No stack

我試圖運行一個測試程序,看看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中看到沒有堆棧

從/ somepath讀取符號這里../tmp / out ...完成。 “/ somepath here / core.30117”不是核心轉儲:文件格式無法識別

你的核心轉儲以某種方式被破壞了。 實際上它沒有被gdb加載所以輸入bt沒有效果。

嘗試檢查它,這些命令應該給你一些關於核心轉儲的信息:

  • file core.28149
  • strings core.28149

gcc沒有理由不優化你的程序

int main()
{
    assert(0);
}

要消除所有疑問,請檢查生成的裝配。

請嘗試以下方式:

$ clang++ -g -O0 -o dump dump.cpp

$ ./dump
100
Assertion failed: (0), function fun2, file dump.cpp, line 9.
Abort trap (core dumped)

$ gdb --core dump.core
. . .
Core was generated by `dump'.
Program terminated with signal SIGABRT, Aborted.
#0  0x000000080149f6ca in ?? ()
(gdb) file dump
Reading symbols from dump...done.
(gdb) set solib-search-path "/lib:<path>/llvm/lib"
(gdb) bt
#0  0x000000080149f6ca in thr_kill () from /lib/libc.so.7
#1  0x0000000801574149 in abort () from /lib/libc.so.7
#2  0x0000000801556011 in __assert () from /lib/libc.so.7
#3  0x000000000040130a in fun2 (num=100) at dump.cpp:10
#4  0x0000000000401343 in fun1 (num=100) at dump.cpp:20
#5  0x000000000040137e in main () at dump.cpp:27

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM