对Unix/Linux环境下运行的程序,有时会报出“段错误”、“段错误(吐核)”、“core dump”等信息,程序并终止。如果系统中的ulimit -c 足够大的话,会在程序目录下生成core文件。
那么core文件又是什么呢,大概内容是程序崩溃时的内存镜像。如果我们在程序编译时加了-g选项(添加调试信息),那么我们可以通过gdb去查看程序崩溃的原因。
下面通过源代码举例一下(Debian7操作系统):
代码比较简单,就是给空指针赋值。
保存后,gcc -g gdbdemo.c -o gdbdemo生成可执行文件。
然后查看ulimit -c 是否允许生成core文件,如果为0,则修改成其他值 或 unlimited值。
运行./gdbdemo程序后,报出“段错误(吐核)”信息,并生成core文件。
gdb ./gdbdemo ./core可查看core文件,并定位出错行。

当Unix/Linux程序出现'段错误'时,若系统允许生成core文件,可以借此分析原因。core文件是程序崩溃时的内存镜像,配合gdb和编译时的-g选项,可以定位错误行,例如在Debian7上,通过gdb查看core文件,使用tb或where命令找到错误源,如本例中空指针赋值导致的段错误。
最低0.47元/天 解锁文章
679

被折叠的 条评论
为什么被折叠?



