/* 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);