抓取coredump的方式
1、需要kernel支持;
2、配置生成coredump参数;
echo "/mnt/sdcard/core.%e.%t.%p" > /proc/sys/kernel/core_pattern
ulimit -c unlimited
3、设置异常代码发生段错误生成coedump
如果你当初是以用户 A 运行了某个程序,但在 ps 里看到的这个程序的运行用户却是 B 的话,那么这些进程就是调用了 seteuid 了。
或者使用了daemon程序,如下
start-stop-daemon --start --chuid user --exec function &
为了能够让这些进程生成 core dump,需要将 /proc/sys/fs/suid_dumpable 文件的内容改为 1(一般默认是 0)。
root用户:
echo 1 > /proc/sys/fs/suid_dumpable
echo “/mnt/sdcard/core.%e.%t.%p” > /proc/sys/kernel/core_pattern
切到user用户:
ulimit -c unlimited
运行程序,设置异常代码,
int coredump_test()
{
TYDEBUG("test for coredump\n");
char *a = "test";
*a = 1;
TYDEBUG("2test for coredump\n");
int *p = NULL;
*p = 0;
return 0;
}
[1]+ Segmentation fault (core dumped) /function
就能正常生成coredump 文件了
可能会遇到coredump信息大小为0KB的情况,可如下处理:
默认情况下,运行 setuid 的程序不会生成核心转储,以防止敏感信息泄露。 要为 setuid 程序启用核心转储(对于正在运行的内核,在重新启动时不持久):
对于 Linux :“suidsafe”(推荐)——通过让核心转储由 root 拥有并且只能由 root 读取来保护特权信息:
echo 2 > /proc/sys/fs/suid_dumpable