使用核心文件
创建了这个非常糟糕的程序
#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 不知道如何处理它。