Two solutions:
Method 1. signal + fork + abort:
pid_t ChildPid;
int Status;
void (*PrevSIGABT)(int);
PrevSIGIOT = signal(SIGABT, SIG_DFL);
ChildPid = fork();
if (ChildPid == NULL)
abort();
else
waitpid(ChildPid, &Status, NULL);
signal(SIGABT, PrevSIGABT);
Method 2. proc + elf generator
open /proc/$pid/mem, /proc/$pid/regs, /proc/$pid/fregs, /proc/$pid/status, /proc/$pid/map
write to elf core file
Method 2 is used by gdb and gcore.
本文介绍了两种在程序崩溃时生成核心转储文件的方法:第一种使用signal、fork及abort函数;第二种通过访问/proc文件系统并写入ELF格式的core文件,此方法被gdb和gcore所采用。
2万+

被折叠的 条评论
为什么被折叠?



