如何捕获崩溃进程的内存转储

评论 (0)链接2012-02-14 

1.程序实现
rlimit rl;
if (getrlimit(RLIMIT_CORE, &rl) == -1)
printf("getrlimit failed. This could be problem.\n");
else
{
rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_CORE, &rl) == -1)
printf("setrlimit failed. Server may not save core.dump files.\n");
}
2.ulimit -c xxx 系统设置
3.gdb generate-core-file

李健
编辑于 2012-02-14
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-14

windows下有抓dump的工具可以抓崩溃进程的内存存储,linux中在运行程序时打开ulimit,程序崩溃时也会生成带内存存储的core文件

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-14

补充一下:
多个进程共享内存时,由于共享内存内容相同,只需要设定某个进程进行转储,节省空间,通过/proc/<PID>/coredump_filter进行设定。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-17

崩溃通常是由进程中未处理的异常(如访问冲突或堆栈溢出)引起的。在这些情况下,Windows 的默认调试器 Dr. Watson (drwtsn32.exe) 捕获异常并终止进程。

若要捕获崩溃进程的内存转储,可按照下面的这些步骤配置调试诊断工具来捕获未处理的异常:
从“开始”、“所有程序”、“IIS 诊断”、“调试诊断工具”、“调试诊断工具 1.0”启动调试诊断工具。

如果没有显示添加规则向导的“选择规则类型”对话框,请单击“工具”菜单,选择“规则操作”,然后单击“添加规则”显示添加规则向导。

在“选择规则类型”对话框中选择“崩溃”选项,然后单击“下一步”。

在“选择目标类型”对话框中选择“特定进程”,然后单击“下一步”。

选择可能崩溃的进程,然后单击“下一步”。

在“高级配置”对话框中,单击“下一步”接受默认值。

在“选择转储位置和规则名称”对话框中,单击“下一步”接受默认值。

在“已完成规则”对话框中,单击“完成”,接受“立即激活规则”的默认值。

默认情况下,该进程中下次发生未处理的异常时,其内存转储将保存到本地计算机的 \Program Files\IIS Resources\DebugDiag\Logs\<崩溃规则名称>目录中。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-18
德问是一个专业的编程问答社区,请 登录注册 后再提交答案