现在的位置: 首页 > 综合 > 正文

在代码中配置当前进程的coredump环境

2016年08月25日 ⁄ 综合 ⁄ 共 1062字 ⁄ 字号 评论关闭
/*
debug嵌入式程序时,如在大规模版本合并,新项目开发或者硬件平台移植中,可能经常会出现程序启动中崩溃的问题,
除了在启动脚本修改coredump相关配置外,也可以在应用程序启动的开始在代码中对当前进程的coredump进行设置
具体流程如下
*/
struct rlimit limit_get, limit_set;
int core_pid_fd, core_pattern_fd;

/*coredmp配置文件,脚本中可以直接echo进去*/
#define KERNEL_CORE_PID_FILE "/proc/sys/kernel/core_uses_pid"
#define KERNEL_PATTERN_FILE  "/proc/sys/kernel/core_pattern"

/*
1.放开进程资源限制
linux下,每个进程使用的资源都有限制,可以用rlimit结构通过getrlimit()和setrlimit()获取和修改
*/
limit_set.rlim_cur = RLIM_INFINITY;
limit_set.rlim_max = RLIM_INFINITY;
if(setrlimit(RLIMIT_CORE, &limit_set)){
	printf("set RLIMIT_CORE failed\n");
	return -1;
}
getrlimit(RLIMIT_CORE, &limit_get)
if(limit_get.rlim_cur == limit_set.rlim_cur && limit_get.rlim_max == limit_get.rlim_max)
	printf("set RLIMIT_CORE successed\n");

/*
2.设置生成core文件的路径
*/
path = "/home/yejing/coredump"	
core_pattern_fd = open(KERNEL_PATTERN_FILE, O_RDWR|O_NDELAY|O_TRUNC, DEFAULT_FILE_MODE);
if (strlen(path) != write(iFd2, path, strlen(path)))
	exit(1);
	
/*
3.设置生成core的pid
*/
pid = "123456";
core_pid_fd = open(KERNEL_CORE_PID_FILE, O_RDWR|O_NDELAY|O_TRUNC, DEFAULT_FILE_MODE);
	
if (strlen(pid) != write(core_pid_fd, pid, strlen(pid)))
	exit(1);

抱歉!评论已关闭.