大家好,今日小源来为大家解答以上的问题。core文件重要吗,core文件是啥很多人还不知道,现在让我们一起来看看吧!
1、在Unix系统下,应用程序崩溃,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常重要的,本文对此做简单介绍。
2、例如,一个程序cmm_test_tool在运行的时候发生了错误,并生成了一个core文件,如下:-rw-r–r– 1 root cmm_test_tool.c-rw-r–r– 1 rootcmm_test_tool.o-rwxr-xr-x 1 root cmm_test_tool-rw--- 1 rootcore.19344-rw--- 1 root core.19351-rw-r–r– 1 rootcmm_test_tool.cfg-rw-r–r– 1 root cmm_test_tool.res-rw-r–r– 1 rootcmm_test_tool.log[root@AUTOTEST_SIM2 mam2cm]#就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件,运行gdbcmm_test_tool core.19344结果如下:[root@AUTOTEST_SIM2 mam2cm]# gdb cmm_test_tool core.19344GNU gdb Red HatLinux (5.2.1-4)Copyright 2002 Free Software Foundation, Inc.GDB is freesoftware, covered by the GNU General Public Lnse, and you arewelcome tochange it and/or distribute copies of it under certain conditions.Type “showcopying” to see the conditions.There is absoluy no warranty for GDB. Type“show warranty” for details.This GDB was configured as“i386-redhat-linux”…Core was generated by `./cmm_test_tool’.Programterminated with signal 11, Segmentation fault.Reading symbols from/lib/i686/libpthread.so.0…done.Loaded symbols for/lib/i686/libpthread.so.0Reading symbols from/lib/i686/libm.so.6…done.Loaded symbols for /lib/i686/libm.so.6Readingsymbols from /usr/lib/libz.so.1…done.Loaded symbols for/usr/lib/libz.so.1Reading symbols from/usr/lib/libstdc++.so.5…done.Loaded symbols for/usr/lib/libstdc++.so.5Reading symbols from/lib/i686/libc.so.6…done.Loaded symbols for /lib/i686/libc.so.6Readingsymbols from /lib/libgcc_s.so.1…done.Loaded symbols for/lib/libgcc_s.so.1Reading symbols from /lib/ld-linux.so.2…done.Loadedsymbols for /lib/ld-linux.so.2Reading symbols from/lib/libnss_files.so.2…done.Loaded symbols for /lib/libnss_files.so.2#00×4202cec1 in __strtoul_internal () from/lib/i686/libc.so.6(gdb)进入gdb提示符,输入where,找到错误发生的位置和堆栈,如下:(gdb) where#0 0×4202cec1 in __strtoul_internal () from/lib/i686/libc.so.6#1 0×4202d4e7 in strtoul () from/lib/i686/libc.so.6#2 0×0804b4da in GetMaxIDFromDB (get_type=2,max_id=0×806fd20) at cmm_test_tool.c:788#3 0×0804b9d7 in ConstrctVODProgram(vod_program=0×40345bdc) at cmm_test_tool.c:946#4 0×0804a2f4 inTVRequestThread (arg=0×0) at cmm_test_tool.c:372#5 0×40021941 inpthread_start_thread () from /lib/i686/libpthread.so.0(gdb)至此,可以看出文件出错的位置是函数 GetMaxIDFromDB,两个参数分别是2和0×806fd20,这个函数位于源代码的788行,基于此,我们就可以有针对性的找到问题的根源,并加以解决。
本文到这结束,希望上面文章对大家有所帮助。