再谈Segmentation fault (core dumped)问题 -查找段错误原因
在前一篇文章“Segmentation fault (core dumped) ”有说了具体core dumped产生的原因。
下面主要来介绍下问题的解决与查找,在linux下一般都使用gdb进行调试,那今天我就以Ubuntu 14.04环境作为介绍
来查找正在的core dumped的原因。需要说明的是,你在编译程序的时候要加调试选项 -g。
$ gcc -o app reverse.c -g
语法:gdb 应用 core
$ gdb app core.36129
这样出来的会有一堆东西,咱们先别管,在输入行中输入where.
Loaded symbols for /lib64/ld-linux-x86-64.so.2Core was generated by `./app‘.Program terminated with signal 11, Segmentation fault.#0 0x0000003262a56ed0 in _IO_vfscanf_internal () from /lib64/libc.so.6Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.x86_64(gdb) where#0 0x0000003262a56ed0 in _IO_vfscanf_internal () from /lib64/libc.so.6#1 0x0000003262a646cd in __isoc99_scanf () from /lib64/libc.so.6#2 0x0000000000400607 in main () at reverse.c:10(gdb)
这就回显示就是core是发生在什么地方,首先你看的顺序从列表的下方往上看,因为这是一个“栈”的顺序。
你可以马上可以看到是什么原因导致的,有兴趣的可以试试看。
另外需要注意的是,如果你的机器上跑很多的应用,你生成的core又不知道是哪个应用产生的,你可以通过下列命令
进行查看:file core
[/ipla_app01/test/]$ ltotal 124-rwxrwxr-x 1 ipla_app01 ipla_app01 8438 Oct 8 14:12 app-rw------- 1 ipla_app01 ipla_app01 200704 Oct 8 14:17 core.36129-rw-rw-r-- 1 ipla_app01 ipla_app01 386 Oct 8 14:11 reverse.c[/ipla_app01/test/]$ file core.36129core.36129: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from ‘./app‘
时间: 2024-10-06 21:10:18