什么是Core Dump?怎么使用? (c core服务器文件路径)

一.首先什么是core dump?

Core的本身意思是内存, Dump的本身意思是扔堆出来。

当我们汪悉开发并且使用 Unix程序时, 有时程序会down了, 却没有任何的提示这时候你可以查看一下有没有样子像困祥乎core.进程号的文件生成, 这个文件是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考。

总的来说core dump其实叫核心转储, 它是当程序运行过程中发生异常,  由操作系统把程序当前的内存状况存储在宴雹一个core文件中, 所以叫core dump。

二.怎么使用Core Dump?

首先我们打开Linux下,然后使用: 

#gdb -c core.pid program_name 

就可以进入gdb模式。 

输入where,就可以指出是在哪一行被Down掉,哪个function内,怎么调用等等。 

(gdb) where 

或者输入 bt。 

(gdb) bt 。

开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.core dump又叫核心转储, 当程序运行过程中发生异常运袜枝, 程序异常退出时, 由操作系统把程序当前的内存状况存好困储在一个core文件中, 叫core dump.gdb -c core文件路径 进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.有时候程序down了, 但是core文件却没有生成. core文件旁敏的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

相关问题拓展阅读:

如何生成core文件

1、先用#ulimit -a可以查看系统core文件的大小限制(之一行),core文件大小设置为0, 即没有打开core dump设置;

view plain copy print?

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a  

core file size(blocks, -c) 0  

data seg size(kbytes, -d) unlimited  

scheng priority(-e) 0  

file size昌槐(blocks, -f) unlimited  

pending signals   (-i)

max locked memory(kbytes, -l) 64  

max memory size(kbytes, -m) unlimited  

open files(-n)

pipe size(512 bytes, -p) 8  

POSIX message queues     (bytes, -q)

real-time priority(-r) 0  

stack size(kbytes, -s)

cpu time (seconds, -t) unlimited  

max user processes(-u)

virtual memory(kbytes, -v) unlimited  

file locks(-x) unlimited  

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a

core file size(blocks, -c) 0

data seg size(kbytes, -d) unlimited

scheng priority(-e) 0

file size (blocks, -f) unlimited

pending signals   (-i) 46621

max locked memory(kbytes, -l) 64

max memory size(kbytes, -m) unlimited

open files(-n) 1024

pipe size(512 bytes, -p) 8

POSIX message queues     (bytes, -q)

real-time priority(-r) 0

stack size(kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes(-u) 46621

virtual memory(kbytes, -v) unlimited

file locks(-x) unlimited

2、接下来使用#ulimit -c 可以设置系统允许生成的core文件大小;

ulimit -c 0 不产生core文件

ulimit -c 100 设置core文件更大为100k

ulimit -c unlimited 不限制core文件大小

执行#ulimit -c unlimited,然后#ulimit -a查看结果如下(之一行):

view plain copy print?

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a  

core file size(blocks, -c) unlimited  

data seg size(kbytes, -d) unlimited  

scheng priority(-e) 0  

file size (blocks, -f) unlimited  

pending signals   (-i)

max locked memory(kbytes, -l) 64  

max memory size    耐洞友     (kbytes, -m) unlimited  

open files(-n)

pipe size(512 bytes, -p) 8  

POSIX message queues     (bytes, -q)

real-time priority(-r) 0  

stack size(kbytes, -s) 8192 颤陵 

cpu time (seconds, -t) unlimited  

max user processes(-u)

virtual memory(kbytes, -v) unlimited  

file locks(-x) unlimited  

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a

core file size(blocks, -c) unlimited

data seg size(kbytes, -d) unlimited

scheng priority(-e) 0

file size (blocks, -f) unlimited

pending signals   (-i) 46621

max locked memory(kbytes, -l) 64

max memory size(kbytes, -m) unlimited

open files(-n) 1024

pipe size(512 bytes, -p) 8

POSIX message queues     (bytes, -q)

real-time priority(-r) 0

stack size(kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes(-u) 46621

virtual memory(kbytes, -v) unlimited

file locks(-x) unlimited

此时,core dump设置打开了,再执行程序出现段错误时,在当前工作目录下产生了core文件,然后我们就可以用gdb调试core文件了。

例如:

#gdb ./test core.2023

注:Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。

很多系统默认的core文件大小都是0,我们可以通过在shell的启动脚本/etc/bashrc或者~/.bashrc等地方来加入 ulimit -c 命令来指定core文件大小,从而确保core文件能够生成。

除此之外,还可以在/proc/sys/kernel/core_pattern里设置core文件的文件名模板,详情请看core的官方man手册。

需要说明的是:上述方法只是在当前shell中生效,重启之后,就不再有效了。永久生效的办法是如下:

永久生效办法:

#vi /etc/profile 然后,在profile中添加:

ulimit -c

(但是,若将产生的转储文件大小大于该数字时,将不会产生转储文件)

或者

ulimit -c unlimited

这样重启机器后生效了。 或者, 使用source命令使之马上生效。

#source /etc/profile

三、指定内核转储的文件名和目录

修改完内核转储设置后,当程序core dump后发现确实在本地目录产生了core文件,但是如果程序多次core dump时,core文件会被覆盖,原因是每次core dump后生成的文件名默认都叫core,接下来就分享下如果想在每次core dum时产生的core文件都带上进程号怎么操作,或者你想把内核转储文件保存到其他目录怎么办?

1、core dump文件名自动加上进程ID

#echo 1 > /proc/sys/kernel/core_uses_pid

最后生成的core dump文件名会加上进程ID.

2、另外可以通过修改kernel的参数,指定内核转储所生成的core文件的路径和文件名。

可以通过在/etc/sysctl.conf文件中,对sysctl变量kernel.core_pattern的设置。

#vim /etc/sysctl.conf 然后,在sysctl.conf文件中添加下面两句话:

kernel.core_pattern = /var/core/core_%e_%p

kernel.core_uses_pid = 0

保存后退出。

注:如果/proc/sys/kernel/core_uses_pid 这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

这里%e, %p分别表示:

%c 转储文件的大小上限

%e 所dump的文件名

%g 所dump的进程的实际组ID

%h 主机名

%p 所dump的进程PID

%s 导致本次coredump的信号

%t 转储时刻(由1970年1月1日起计的秒数)

%u 所dump进程的实际用户ID

可以使用以下命令,使修改结果马上生效。

#sysctl –p /etc/sysctl.conf

请在/var目录下先建立core文件夹,然后执行a.out程序,就会在/var/core/下产生以指定格式命名的内核转储文件。查看转储文件的情况:

#ls /var/core

电脑上显示无法找到Core目录,请重新安装,是什么意思

可拦则能是你在删除程序后造成遗留,开机后仍然在启禅衡渗动这个程序,但是指向的这个目录已经不存在了!被你删掉了

方法是关闭这个启动项目___用360设置开机项,手动设置开机项__

开始,运行,msconfig,启动.

关闭这贺脊个启动项就可以了

什么情况下出现呢?开机出现的话,可以在运行上输信毁搏上MSCONFIG 回车,然后切换到启动项,除滑祥了Ctfmon都取消,重启余备试试

你是安装coreldraw么?

c core服务器文件路径的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c core服务器文件路径,什么是Core Dump?怎么使用?,如何生成core文件,电脑上显示无法找到Core目录,请重新安装,是什么意思的信息别忘了在本站进行查找喔。


数据运维技术 » 什么是Core Dump?怎么使用? (c core服务器文件路径)