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
发布评论
评论(4)
windows下有抓dump的工具可以抓崩溃进程的内存存储,linux中在运行程序时打开ulimit,程序崩溃时也会生成带内存存储的core文件
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
补充一下:
多个进程共享内存时,由于共享内存内容相同,只需要设定某个进程进行转储,节省空间,通过/proc/<PID>/coredump_filter进行设定。
崩溃通常是由进程中未处理的异常(如访问冲突或堆栈溢出)引起的。在这些情况下,Windows 的默认调试器 Dr. Watson (drwtsn32.exe) 捕获异常并终止进程。
若要捕获崩溃进程的内存转储,可按照下面的这些步骤配置调试诊断工具来捕获未处理的异常:
从“开始”、“所有程序”、“IIS 诊断”、“调试诊断工具”、“调试诊断工具 1.0”启动调试诊断工具。
如果没有显示添加规则向导的“选择规则类型”对话框,请单击“工具”菜单,选择“规则操作”,然后单击“添加规则”显示添加规则向导。
在“选择规则类型”对话框中选择“崩溃”选项,然后单击“下一步”。
在“选择目标类型”对话框中选择“特定进程”,然后单击“下一步”。
选择可能崩溃的进程,然后单击“下一步”。
在“高级配置”对话框中,单击“下一步”接受默认值。
在“选择转储位置和规则名称”对话框中,单击“下一步”接受默认值。
在“已完成规则”对话框中,单击“完成”,接受“立即激活规则”的默认值。
默认情况下,该进程中下次发生未处理的异常时,其内存转储将保存到本地计算机的 Program FilesIIS ResourcesDebugDiagLogs<崩溃规则名称>目录中。