何谓 core dump?
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉时的内存内容 dump出来(现在通常是写在一个叫core 的 file 里面),这个动作就叫作 core dump。这个 core 文件能够使用 gdb进行事后的 debug。
gdb -c core, 进去後打 where,就可以 show 出你是在程序哪一行当掉的,还有在当掉时在哪个 function 里, 这个 function是被哪个 function 所 call 的,而这个 function 又是被哪个 function 所 call的.... 一直到 main()。
要使得程序在出现严重错误的时候能够产生 core,以便进行debug,需要先检查运行环境的一些参数。
dev@DEV67:~$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes,-m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds,-t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited
其中的 “core file size”这个值被用来控制产生 core文件的大小。如果为 0,表示不产生 core文件。通常可以使用如下的命令重新设置这个值
ulimit -c unlimited
gcc -g test.c -o test
./test生成core文件
gdb ./test core文件
查看dump结果。
bt查看出错位置。
If you have any questions or ideas ,please feel free to contact me : )
thx.^^
QQ: 1623213673