gdb如何调试coredump文件:
gdb 可执行文件路径 coredump文件路径
输入bt,或bt full,或者where查看调用栈信息,以及代码在哪里出错
注意:
1.编译程序时,添加-g选项;
2.看环境上的生成coredump是否打开
查看coredump路径:
1.cat /proc/sys/kernel/core_pattern
2./sbin/sysctl kernel.core_pattern
查看环境的生成coredump是否打开:
ulimit -a,第一行
设置:
limit -c unlimited 不限制生成core文件大小
ulimit -c 0 关闭core文件生成开关
ulimit -c 1024 限定生成core文件的大小为1024
为特定进程设置coredump限制
如果进程的coredump设置的过小,会导致产生的coredump产生截断现象,通过gdb调试的时候会提示错误。
设置coredump大小的有两种方式:在代码中调用setrlimit,以及通过prlimit命令进行修改
a.通过代码设置在代码中,通过调用setrlimit设置程序的coredump大小,
RLIMIT_CORE is defined in header sys/resource.h. Limit on size of core dump file.
RLIMIT_CORE can be used in the following way:
if (setrlimit(RLIMIT_CORE, &coredump_limits) != 0) {}
void setlimits(void) {
struct rlimit coredump_limits, thread_limits, mem_limits, cpu_limits;
coredump_limits.rlim_cur = coredump_limits.rlim_max = 0;
if (setrlimit(RLIMIT_CORE, &coredump_limits) != 0) {
err(ERR_CODE, "Couldn't set core dump limits\n");
}
参考:C if (setrlimit(RLIMIT_CORE, &coredump_limits) != 0) {
b. 通过prlimit进行设置,
prlimit -p 进程id:查看指定进程的coredump限制
设置:
prlimit -p $(pidof xxx_process) -c 设置coredump字节数
prlimit的使用: