如何分析core

如何分析core,第1张

什么是Core Dump?

Core的意思是内存, Dump的意思是扔出来, 堆出来.

开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是 *** 作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由 *** 作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.

如何使用core文件?

gdb -c core文件路径 [应用程序的路径]

进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

为什么没有core文件生成呢?

有时候程序down了, 但是core文件却没有生成. core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.

ulimit -c unlimited

core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

可以执行limit命令具体的取值,如下:

<75 sersrv1 [pisac10] :/home/pisac10>limit

cputime unlimited

filesizeunlimited

datasizeunlimited

stacksize unlimited

coredumpsize4194303 kbytes

memoryuse unlimited

vmemoryuse unlimited

descriptors 1024

memorylockedunlimited

maxproc 69632

如果发现某些选项达不到要求,可以将这些放大

用gdb查看core文件:

下面我们可以在发生运行时信号引起的错误时发生core dump了.

发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.

gdb [exec file] [core file]

如:

gdb ./test test.core

在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.

如何知道一个core文件是哪个进程的:

使用file core文件命令就可以了,如下:

<63 sersrv1 [pisac10] :/home/pisac10>file core.3118

core.3118: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, SVR4-style, from 'csser'

SUSE Linux *** 作系统可以使用kill -7 进程号 命令强制杀掉进程并且产生core文件

thread apply all where

一般步骤

1. file core文件,可以显示出core文件是哪个进程产生的

2.使用gdb或者dbx加载core文件, gdb 进程名 core文件

3.where,显示堆栈信息,显示出coredump的地方

例如有个程序叫 ABC,产生了一个叫core的core文件,

那么输入 file core, 会显示 这个core文件是由ABC产生的,

然后输入 gdb ABC core装截core文件,

然后 输入 where 显示堆栈信息


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存