概述
Windows应用崩溃捕获
一、序言
最近发现我们自己的程序会因为各种各样的原因异常崩溃,但却没有日志记录,也没有任何弹窗提示,电脑设置了定时重启,重启自动运行后程序就可以正常运行了,但这之间崩溃的原因没有办法获取,很是苦恼。因此要想办法对其进行监控。
最开始我的想法是这样的:写一个脚本,每隔2s进行一次截屏,再查找进程,如果发现进程已经消失,则保存截屏图片,再写日志记录崩溃时间,这样就可以在之后看到程序崩溃前 1~2 秒的状态。BUT,我们的程序直接在主机运行,没有显示器,需要虚拟一个显示器,这样一来,对系统资源的消耗就太大了。对于扣扣索索的我,这显然不是好的解决办法。况且,这样做根本是治标不治本,即便获得了截图,也没有什么参考价值,毕竟程序自动运行,崩溃肯定是由于内部问题(例如内存溢出呀,当然只是举例,不可能犯这么低级的错误)造成。经过我不懈的查找,终于发现了一名大佬分享的文章,经过努力实现了我的目的,特此记录。
参考大佬地址 https://developer.aliyun.com/article/229733
二、实现
我们使用windows自带的崩溃捕获dump的功能,只需要我们手动设置一下即可使用。
1.启动 Windows Error Reporting Service 服务。
2.移除默认的调试器。
打开注册表编辑器(win+r 输入 regedit)
如果你的机器装了VS开发工具,会在注册表里写入调试器地址,需要把它删除
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAeDebugDebugger
HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkDbgManagedDebugger
在 64 位 操作系统上也删除以下注册表项:
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebugDebugger
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkDbgManagedDebugger
3.执行下面注册表脚本,添加程序崩溃捕获dump(这个设置是捕获所有的程序崩溃的dump,可能会产生的文件比较多也比较大)
将下面的内容复制粘贴到 txt 中(注意第4行的 C:CrashDump 是你dump文件的保存路径,可根据需要进行更改)
@echo off
echo 正在启用Dump...
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps"
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:CrashDump" /f
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
echo Dump已经启用
pause
@echo on
点击 file,选择另存为,保存类型选择所有文件,文件名后缀为 bat,编码选择 ANSI。
以管理员身份运行生成的 .bat 文件,得到如下结果,表明设置完成。
4.测试结果
编写C++程序:
#include<iostream>
using namespace std;
int mian()
{
int i = 1/0; //此处用1除以0造成程序崩溃
return 0;
}
编译生成 test.exe,运行,观察 C:CrashDump文件下是否生成对应的 .dmp 文件。
表明我们配置成功。
三、分析dump文件。
要分析 dump 文件需要使用 windbg 这个工具,可从腾讯软件中心下载。
下载后的安装均为默认,此处省略。
安装完成后,我们点击开始在所有应用中找到它
打开后点击 Ctrl+D,选择我们刚才生成的文档。
可以看到如下结果
至此,我们就可以利用 windows 自带的异常捕获捕获到应用的崩溃原因,简直不要太爽。
最后
以上就是无奈猫咪为你收集整理的Windows应用崩溃捕获Windows应用崩溃捕获的全部内容,希望文章能够帮你解决Windows应用崩溃捕获Windows应用崩溃捕获所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复