- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章关于linux下core dump【总结】由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、前言 。
一直在从事linux下后台开发,经常与core文件打交道。还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志。我不知所措,同事叫我看看core,我却问什么是core,怎么看。同事鄙视的眼神,我依然在目。后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因。当时就觉得很神奇,core文件是怎么产生的呢?难道系统会自动产生,可是我在自己的linux系统上面写个非法程序测试,并没有产生core问题?这又是怎么回事呢?今天在ngnix的源码时候,发现可以在程序中设置core dump,又是怎么回事呢?在公司发现生成的core文件都带有进程名称、进程id、和时间,这又是怎么做到的呢?今天带着这些疑问来说说core文件是如何生成,如何配置.
2、基本概念 。
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做core dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景.
3、开启core dump 。
可以使用命令ulimit开启,也可以在程序中通过setrlimit系统调用开启.
。
。
。
程序中开启core dump,通过如下api可以查看和设置rlimit_core 。
1
2
3
4
|
#include <
sys
/resource.h>
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
|
。
参考程序如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <
unistd.h
>
#include <
sys
/time.h>
#include <
sys
/resource.h>
#include <
stdio.h
>
#define core_size 1024 * 1024 * 500
int main()
{
struct rlimit rlmt;
if (getrlimit(rlimit_core, &rlmt) == -1) {
return -1;
}
printf("before set rlimit core dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);
rlmt.rlim_cur = (rlim_t)core_size;
rlmt.rlim_max = (rlim_t)core_size;
if (setrlimit(rlimit_core, &rlmt) == -1) {
return -1;
}
if (getrlimit(rlimit_core, &rlmt) == -1) {
return -1;
}
printf("after set rlimit core dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);
/*测试非法内存,产生core文件*/
int *ptr = null;
*ptr = 10;
return 0;
}
|
执行./main, 生成的core文件如下所示 。
gdb调试core文件,查看程序挂在位置。当core dump 之后,使用命令 gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名.
以上这篇关于linux下core dump【总结】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
最后此篇关于关于linux下core dump【总结】的文章就讲到这里了,如果你想了解更多关于关于linux下core dump【总结】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在研究 MySQL 用户定义函数 (UDF),它基本上是 Windows 系统函数的包装器。我的问题是 UDF 对于某些输入按预期工作,但会导致 mysqld 对于其他输入崩溃。 UDF 本身采用
我在 this 中搜索过官方文档查找python中 json.dump() 和 json.dumps() 之间的区别。很明显,它们与文件写入选项有关。 但是它们之间的详细区别是什么?在什么情况下一个比
以前写的很简单,只有几句话,最近发现本文是本博客阅读量最大的一篇文章,觉得这样有种把人骗进来的感觉,于是又细化了一些。如果还有不好的地方,欢迎指出。 首先说明基本功能: dumps是将dict转
有没有办法在运行 'erl' 时禁用“崩溃转储”和“核心转储”文件的生成? PS:我知道 erl 的“+d”选项,但我想完全禁用崩溃/核心转储的生成。 最佳答案 您还可以将 ERL_CRASH_DUM
这是一个错误吗? >>> import json >>> import cPickle >>> json.dumps(cPickle.dumps(u'å')) Traceback (most rece
我已经开始了解用于对象序列化和反序列化的pickle模块了。 我知道pickle.dump是用来将代码存储为字节流(序列化),而pickle.load本质上是相反的,转成流字节返回到 python 对
我有一个这种格式的字符串, d = {'details': {'hawk_branch': {'tandem': ['4210bnd72']}, 'uclif_branch': {'tandem':
下面是我的python代码 r = requests.get("https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults
我正在使用 PigLatin,使用 grunt,每次我“转储”东西时,我的控制台都会被诸如此类、诸如此类的非信息所破坏,有没有办法抑制这一切? grunt> A = LOAD 'testingData
我正在尝试将 mongodump 编辑的一组 .bson 文件 mongorestore 到位于 docker 中的 mongo 数据库,在我只有 SSH 访问权限的 Ubuntu 实例上。 我有一个
我正在尝试使用语音发送文本 watson api,但是当我设置 interim_results = True 时,我收到了值错误。请帮助我:) with open(join(dirname(__fil
鉴于 dump.rdb(或 .json 格式)文件中现有 redis 数据库的快照,我想在我自己的机器上恢复此数据以在其上运行一些测试。 任何有关如何执行此操作的指示都将不胜感激。 我尝试解析 dum
我对 Laravel 4 和 Composer 还是很陌生。当我做 Laravel 4 教程时,我无法理解这两个命令之间的区别; php artisan dump-autoload 和 compose
之间有区别吗 object = {1:"one", 2:"two", 3:"three"} file.write(json.dumps(object)) 和 json.dump(object) .如果
导出/导入整个模式的旧方法: exp user/pwdp@server FILE=export.dmp OWNER=user ROWS=Y imp newuser/pwd@server FULL=
我有一堆需要恢复的 mongo 数据库。我使用 mongodump 获取备份目录,其中包括其中的集合。像这样: |- mydir |-- db1 |--- collection1 |--- colle
尽管我在 root 下运行 dotnet-dump,并且进程在 root 下运行(请参阅下面的服务描述),但似乎我缺乏一些权限。 我还尝试了 home、var 和 tmp 中的其他目录:所有相同的消息
我正在尝试生成 LLVM IR 代码,作为 Kaleidoscope tutorial 的一部分我已成功完成在同一台机器上,使用这些相同的编译器标志。 我的代码在 clang++ 3.4 中编译没有错
我正在使用 eclipse 开发 Web 应用程序,当我尝试从 eclipse 中在服务器上运行我的应用程序时遇到了问题。 # # A fatal error has been detected by
给定一个任意的 picklable Python 数据结构data,是 with open('a', 'bw') as f: f.write(pickle.dumps(data)) 相当于 w
我是一名优秀的程序员,十分优秀!