系统转储和核心转储的区别
而进程运行在较低的优先级(这个优先级不同于系统中定义的优先级,而是指CPU代码指令的优先级),由操作系统控制,所以操作系统可以在不影响其他进程的情况下停止一个进程的运行,并保存相关环境。这是用于分析的核心转储文件。
如果进程是用高级语言编写编译的,用户有源程序,可以在编译时带上一个诊断符号表(高级语言的编译器都有这个功能)来分析是哪个源程序语句导致的问题,通过系统提供的分析工具添加一个核心文件,这样更容易纠正问题。当然,除非一开始就带了符号表来编译,否则只能重新编译程序,重新运行程序来重现错误。
如果用户没有源程序,只能分析汇编指令的水平,很难发现问题并做出修正,所以这种情况下没必要麻烦,也没办法发现问题。
当内核转储的进程正在进行时,操作系统会异常终止进程,释放其占用的资源,不太可能对系统本身的运行造成危害。这与系统转储有着本质的不同。当系统转储产生时,必然伴随着系统崩溃和关机。处理核心转储时,只会导致相应的进程终止,系统本身不会崩溃。当然,如果这个过程与其他过程相关,其他过程也会受到影响。至于后果如何,要看这种异常情况(与自身相关的进程突然终止)的处理机制,没有一个通用的结论。
如何生成coredump文件?
登录LINUX服务器,在任何地方输入。
echo "ulimit -c 1024 " >& gt/etc/profile
退出LINUX,再次登录LINUX。
ulimit -c标牌
如果显示1024,则意味着coredump已经打开。
// -
1简介。磁心存储文件
// -
当程序崩溃时,它通常会在指定的目录中生成一个核心文件。核心文件只是一个内存镜像(加上调试信息),主要用于调试。
// -
2.打开或关闭核心文件的生成。
// -
使用以下命令防止系统生成核心文件:
尤利姆-c 0
以下命令可以检查生成核心文件的选项是否打开:
尤利姆特-a
该命令将显示所有用户定制,其中选项-a代表“全部”。
您还可以修改系统文件来调整核心选项。
在/etc/profile中,通常会有一句话禁止生成核心文件,这个设置通常是合理的:
#默认情况下没有核心文件
ulimit-S-c0 & gt;/dev/null 2 & gt;& amp1
但是有时候在开发过程中,为了调试问题,还是需要在特定的用户环境下打开核心文件生成的设置。
将ulimit -c unlimited添加到用户的~/中。bash_profile允许特定用户生成核心文件。
如果ulimit -c 0也禁止生成核心文件,而ulimit -c 1024则将生成的核心文件大小限制在1024kb。
// -
3.设置核心转储文件目录和命名规则。
// -
/proc/sys/kernel/core_uses_pid可以控制是否在生成的核心文件的文件名中添加pid作为扩展名。如果添加,则文件内容为1,否则为0。
Proc/sys/kernel/core_pattern可以设置格式化后的核心文件的存储位置或文件名,比如原文件内容为core-%e。
它可以修改如下:
echo "/corefile/core-% e-% p-% t " & gt;核心模式
将控制生成的核心文件存储在/corefile目录下,生成的文件名为core- command name -pid- timestamp。
以下是参数列表:
% p-将pid插入文件名添加pid。
% u-insert current uid into filename添加当前uid。
% g-insert current gid into filename添加当前GID。
% s-将导致核心转储的信号插入文件名中添加导致核心生成的信号。
% t-在文件名中插入核心转储占用的unix时间添加生成核心文件时的UNIX时间。
% h-将发生核心转储的主机名插入文件名添加主机名中。
% e-将核心转储可执行文件名称插入文件名中添加命令名称。
// -
使用核心文件
// -
键入核心文件所在的目录:
gdb -c核心
它将启动GNU的调试器来调试核心文件,并将显示生成这个核心文件的程序的名称、停止这个程序的信号等等。
如果您已经知道是什么程序生成了这个核心文件,例如MyServer崩溃生成core.12345,那么使用以下指令进行调试:
gdb -c核心MyServer
学习gdb的使用应该怎么做?
// -
5.一个测试生成的核心文件的小方法。
// -
直接输入指令:
kill -s SIGSEGV $$