有的時候程式需要檢視程序在某些極端情況下進入某個函式時,需要看是哪個函式呼叫它。
這個時候可以使用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...