Windows程序崩溃捕获一例

背景:
windows系统内某进程总是异常崩溃退出,导致程序频繁死掉,windows自带崩溃捕获dump的功能,只需要我们手动设置一下即可

1.启动 Windows Error Reporting Service 服务

2.移除默认的调试器

如果你的机器装了VS开发工具,会在注册表里写入调试器地址,需要把它删除

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

在 64 位 操作系统上也删除以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

3、执行下面注册表脚本,添加程序崩溃捕获dump(这个设置是捕获所有的程序崩溃的dump,可能会产生的文件比较多也比较大)

@echo off
echo 正在启用Dump...
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\CrashDump" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
echo Dump已经启用
pause
@echo on

如果想捕获某一个进程,则参考如下设置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe]

4,查看dump文件,按照上面的设置,对应的dump文件在
“C:\CrashDump” 这个目录下面

5,分析dump使用windbg这个工具,安装后自动关联dump文件,双击dump文件即可自动分析,生成分析报告

由于没有现场截图,贴上当时分析报告的主因:

In GetTCP_Winform_Service.exe.5356.dmp the assembly instruction at KERNELBASE!RaiseException+58 in C:\Windows\SysWOW64\KERNELBASE.dll has caused a CLR Exception on thread 981 with the following error information
Type:   System.Net.Sockets.SocketException
Message:   远程主机强迫关闭了一个现有的连接。

与开发核实后,该进程在连接重试方面存在问题,调整连接机制后崩溃问题恢复(keepalive+reconnect)

时间: 2024-08-30 03:37:07

Windows程序崩溃捕获一例的相关文章

windows-Windows下抓取程序崩溃的Dump文件 遇到的问题

问题描述 Windows下抓取程序崩溃的Dump文件 遇到的问题 在Windows环境下,程序崩溃的时候抓取Dump文件,经测试在本机的开发环境下及Win 7环境下 抓取都没有问题,而在Xp和Windows 2003下抓取到的Dump文件都是0KB,这是怎么回事, 有哪位仁兄有这方面经验的还请赐教! 解决方案 Python 批量分析windows程序崩溃捕获的dump文件程序崩溃时抓取dump文件windows程序崩溃生成dump文件 解决方案二: 要看你的API是如何生成dump的,可能是用到

如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数

1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的"名言",恐怕是程序员最怕见也最常见的东西了. 在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现程序崩溃并不可怕,反而是测试的成功.作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正. 本文描述了自己总结的几种定位崩溃

Win32环境下的程序崩溃异常定位

1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的"名言",恐怕是程序员最怕见也最常见的东西了. 在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现程序崩溃并不可怕,反而是测试的成功.作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正. 本文描述了自己总结的几种定位崩溃

iOS 捕获程序崩溃日志

  我们常常会遇到iPhone手机或者iPad平板上运行APP崩溃的问题,有时候打开某个APP,却一下子"闪退"了.对于开发者来说,这个绝对是头疼的问题.那么如何获取到iOS设备崩溃日志呢?这个提供一些简单的方法,共开发者与用户沟通使用. iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者? 下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作 代码如下: NSSetUncaughtExceptionHan

c++-程序崩溃时怎么能让Windows不提示

问题描述 程序崩溃时怎么能让Windows不提示 做了一个服务器程序,通过调用另外的控制台(C++编写)程序来运行算法,但控制台程序崩溃的时候Windows就会出现"XXX已停止工作"这样的提示,虽然服务器可以自动关闭超时的进程,但是不想让客户看见错误提示,请问在尽量不更改系统设置的情况下如何才能使系统不出现错误提示?

iOS 捕获程序崩溃日志_IOS

iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者? 下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作 复制代码 代码如下: NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler); 官方文档介绍:Sets the top-level error-handling function where you can perform last-minute lo

技术支持欺诈冒充Windows应用程序崩溃警报

安全新闻网站BleepingComputer的Lawrence Abrams发现了一个技术支持欺诈恶意软件,它在受害者电脑上安装之后,被编程为每当Windows中的应用程序崩溃时弹出,提示用户拨打一个电话号码来解决崩溃问题. 这个恶意软件由一家名为"Super Tuneup Technologies LLP"的公司发布,Lawrence Abrams认为该公司在印度经营.这个安装后名为"em.exe"的事件监视器恶意软件,设置Windows计划任务,该程序将被编程为

windows程序调试

调试策略 第一章         调试的过程 1.         成功而高效的调试的关键是找到准确的错误信息 2.         一旦找到一个错误,就可能找到更多.类似的代码可能还有类似的错误 3.         从错误中学习如何预防将来会产生的错误 4.         对于新代码,根本不需要执行测试来判断它是否有错误 第二章         编写便于调试的C++代码 C++语言和编程风格 1.         在需要的时候使用语言的高级特性 2.         要写出能被"人&quo

别发送Windows系统崩溃错误报告

  最近一个名为Websense的安全研究小组的最新研究成果表明,消费者所使用的Windows系统在出现错误报告时,如果将错误报告提交给微软公司,那么这将很有可能被黑客截取,并依据这些信息帮助黑客制定相关攻击策略.当系统出现崩溃的时候会弹出相应的对话框,这些信息中详细包含了设备的运行状态,Windows的版本信息.应用信息等,而这些信息都有可能被黑客监听到. 虽然当系统或者应用程序崩溃的时候会弹出错误报告,通常需要用户的确认才是否将这些错误信息传递给微软,不过在传输的时候有些信息往往不会跟用户进