如何察看core文件的内容

如何察看core文件的内容,第1张

一般步骤1.filecore文件,可以显示出core文件是哪个进程产生的2.使用gdb或者dbx加载core文件,gdb进程名core文件3.where,显示堆栈信息,显示出coredump的地方例如有个程序叫ABC,产生了一个叫core的core文件,那么输入filecore,会显示这个core文件是由ABC产生的,然后输入gdbABCcore装截core文件,然后输入where显示堆栈信息

在Unix系统下,应用程序崩溃,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常重要的,本文对此做简单介绍。

例如,一个程序cmm_test_tool在运行的时候发生了错误,并生成了一个core文件,如下:

-rw-r–r– 1 root cmm_test_tool.c

-rw-r–r– 1 root

cmm_test_tool.o

-rwxr-xr-x 1 root cmm_test_tool

-rw——- 1 root

core.19344

-rw——- 1 root core.19351

-rw-r–r– 1 root

cmm_test_tool.cfg

-rw-r–r– 1 root cmm_test_tool.res

-rw-r–r– 1 root

cmm_test_tool.log

[root@AUTOTEST_SIM2 mam2cm]#

就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件,运行

gdb

cmm_test_tool core.19344结果如下:

[root@AUTOTEST_SIM2 mam2cm]# gdb cmm_test_tool core.19344

GNU gdb Red Hat

Linux (5.2.1-4)

Copyright 2002 Free Software Foundation, Inc.

GDB is free

software, covered by the GNU General Public License, and you are

welcome to

change it and/or distribute copies of it under certain conditions.

Type “show

copying” to see the conditions.

There is absolutely no warranty for GDB. Type

“show warranty” for details.

This GDB was configured as

“i386-redhat-linux”…

Core was generated by `./cmm_test_tool’.

Program

terminated with signal 11, Segmentation fault.

Reading symbols from

/lib/i686/libpthread.so.0…done.

Loaded symbols for

/lib/i686/libpthread.so.0

Reading symbols from

/lib/i686/libm.so.6…done.

Loaded symbols for /lib/i686/libm.so.6

Reading

symbols from /usr/lib/libz.so.1…done.

Loaded symbols for

/usr/lib/libz.so.1

Reading symbols from

/usr/lib/libstdc++.so.5…done.

Loaded symbols for

/usr/lib/libstdc++.so.5

Reading symbols from

/lib/i686/libc.so.6…done.

Loaded symbols for /lib/i686/libc.so.6

Reading

symbols from /lib/libgcc_s.so.1…done.

Loaded symbols for

/lib/libgcc_s.so.1

Reading symbols from /lib/ld-linux.so.2…done.

Loaded

symbols for /lib/ld-linux.so.2

Reading symbols from

/lib/libnss_files.so.2…done.

Loaded symbols for /lib/libnss_files.so.2

#0

0×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 in

TVRequestThread (arg=0×0) at cmm_test_tool.c:372

#5 0×40021941 in

pthread_start_thread () from /lib/i686/libpthread.so.0

(gdb)

至此,可以看出文件出错的位置是函数 GetMaxIDFromDB

,两个参数分别是2和0×806fd20,这个函数位于源代码的788行,基于此,我们就可以有针对性的找到问题的根源,并加以解决。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11802701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存