使用核心檔案
建立了這個非常糟糕的程式
#include <stdio.h>
#include <ctype.h>
// forward declarations
void bad_function()
{
int *test = 5;
free(test);
}
int main(int argc, char *argv[])
{
bad_function();
return 0;
}
gcc -g ex1.c
./a.out //or whatever gcc creates
Segmentation fault (core dumped)
gdb -c core a.out
Core was generated by `./a.out'.
程式以訊號 SIGSEGV,分段故障終止。malloc.c 中的#0 __GI___libc_free(mem = 0x5):2929 2929 malloc.c:沒有這樣的檔案或目錄。
(gdb) where
malloc.c 中的#0 __GI___libc_free(mem = 0x5):ex1.c 中的 bad_function()
中的#2 0x0000000000400549:ex1.c 中的 12#2 0x0000000000400564(argc = 1,argv = 0x7fffb825bd68):19
因為我用 -g 編譯你可以看到呼叫 where 告訴我它不喜歡 bad_function()
第 12 行的程式碼
然後我可以檢查我試圖釋放的測試變數
(gdb) up
ex1.c 中的 bad_function()
中的#1 0x0000000000400549:12 12 free(test);
(gdb) print test
$ 1 =(int *)0x5
(gdb) print *test
無法訪問地址 0x5 處的記憶體
在這種情況下,錯誤是非常明顯的我試圖釋放一個指標,該指標只是分配了地址 5,而不是由 malloc 建立的,因此 free 不知道如何處理它。