backtrace 堆疊列印除錯

2021-09-19 05:20:27 字數 672 閱讀 2334

有的時候程式需要檢視程序在某些極端情況下進入某個函式時,需要看是哪個函式呼叫它。

這個時候可以使用backtrace進行列印。

#include#include#includevoid print_trace()

printf("obtained %zd stack frames.\n", size);

for (i = 0; i < size ; i++)

free(strings);

strings = null;

}void dummy_function(void)

int main()

編譯

$ gcc backtrace_test.c  -rdynamic  -g

輸出:obtained 5 stack frames.

./a.out(print_trace+0x28) [0x400a2e]

./a.out(dummy_function+0xe) [0x400aed]

./a.out(main+0x9) [0x400af9]

/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f0b3d509830]

./a.out(_start+0x29) [0x400939]

使用backtrace獲取堆疊資訊

一些記憶體檢測工具如valgrind,除錯工具如gdb,可以檢視程式執行時函式呼叫的堆疊資訊,有時候在分析程式時要獲得堆疊資訊,借助於backtrace是很有幫助的,其原型如下 include int backtrace void buffer,int size char backtrace sym...

使用backtrace獲取堆疊資訊

gdb將當前函式的棧幀編號為0,為外層函式的棧幀依次加1,這些編號將成為一些gdb命令的引數,以指明將要操作的是哪乙個函式的棧幀。gdb還支援使用address作為棧幀的識別符號,可在棧幀編號被破壞的情況下使用。1.在棧幀之間切換 gdb中有很多針對呼叫堆疊的命令,都需要乙個目標棧幀,例如列印區域性...

列印所有堆疊資訊 gdb GDB除錯C 類

linux上除錯常用的工具就是gdb了。借助學習c 虛函式表和記憶體布局的機會順便學習下gdb常規除錯技巧。一,測試用例 1,c 標頭檔案 szyu test gdb.h ifndef szyu gdb define szyu gdb include class base base int v no...