首页 > 技术文章 > 分析崩溃转储

20170722-kong 2017-11-26 14:30 原文

windows:

*  使用

#include <dbghelp.h>
#pragma comment (lib,"dbghelp.lib")

MiniDumpWriteDump()等函数。

来实现转存储

*  程序运行目录下也需要相应的dll(dbghelp.dll)

linux:

*   使用 ulimit命令打开 core dump

      ulimit -c unlimited

 

*    写一个崩溃的测试代码:

 

 *  编译程序

gcc -g main.c -o main

 

*  执行程序

 

 *   调试程序  

gdb ./main --core=./core

或者

gdb ./main core

 

 

****    

使linux系统中ulimit -c unlimited永久生效

## 说明各个列的含义

##<domain>      <type>   <item>    <value>

##........其他账户配置

##root的配置

@root                  soft         core        unlimited

@root                  hard        core       unlimited

 

配置好后,reboot重启服务器,这样在root组下的用户,其配置生效;其他组的用户不生效

 

*** linux  core dump 注意问题:

1.保证进程对存放 core 文件的目录有写权限。
2.若程序调用seteuid()/setegid() 【chmod u+s  提升普通用户执行权限】改变了进程的有效用户或组,则默认情况下系统不为这些进程生成 core 文件。除非将 /proc/sys/fs /suid_dumpable 文件的内容改为1(一般默认是0)。
3.设置足够大的Core文件大小限制【使用 ulimit -c unlimited 】。程序崩溃时生成Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。

 

推荐阅读