当应用程序在Windows上崩溃并且安装了Visual Studio等调试程序时,将显示以下模式对话框:
[标题:Microsoft Windows]
X已停止工作
一个问题导致程序停止正常工作.Windows将关闭程序并在解决方案可用时通知您.
[调试] [关闭申请]
有没有办法禁用此对话框?也就是说,让程序崩溃并无声地刻录?
我的情况是我想运行几个自动化测试,其中一些将因测试中的应用程序中的错误而崩溃.我不希望这些对话框停止自动化运行.
搜索我认为我已经找到了在Windows XP上禁用此功能的解决方案,这是修改此注册表项:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
但是,这在Windows Vista上不起作用.
windows testing crash-reports windows-vista windows-error-reporting
.Net 4.0应用程序不断为用户崩溃,但仅仅对他而言,我无法重现该错误.他附加了WERInternalMetadata.xmlWindows崩溃报告器生成的文件.通过打开它,我发现它System.IO.FileNotFoundException崩溃了软件,然而,在该函数中没有调用会抛出这种异常的函数,所以这是其他地方或更深层次的问题.
这是文件中"最有趣"的部分.它包含(十六进制)数字,但我无法找出它们的含义.
<ProblemSignatures>
<EventType>CLR20r3</EventType>
<Parameter0>rstvshowtracker.exe</Parameter0>
<Parameter1>1.0.3842.33258</Parameter1>
<Parameter2>4c374e79</Parameter2>
<Parameter3>mscorlib</Parameter3>
<Parameter4>4.0.0.0</Parameter4>
<Parameter5>4ba1da6f</Parameter5>
<Parameter6>1620</Parameter6>
<Parameter7>14</Parameter7>
<Parameter8>System.IO.FileNotFoundException</Parameter8>
</ProblemSignatures>
Run Code Online (Sandbox Code Playgroud)
有没有办法找出导致异常的代码,或者至少找出比其他更多的细节FileNotFoundException?
我正在使用Windows错误报告API调用RegisterApplicationRestart来注册应用程序,当应用程序崩溃或重新启动PC时,WER会自动重新启动该应用程序.
但是,当应用程序崩溃时,会弹出默认的WER对话框("xyz已停止响应"/"您是否要发送有关该问题的更多信息"),并且只有在关闭此对话框后,程序才会重新启动.
有没有办法压制这个对话框?
如果我调用SetErrorMode(SEM_NOGPFAULTERRORBOX),则会按预期禁止该对话框,但重启本身也会停止工作.
如果我通过更改注册表项全局禁用该对话框HKEY_CURRENT_USER\Software\ Microsoft\Windows\Windows Error Reporting\DontShowUI,我得到相同的结果:对话框被禁止,但应用程序也不会重新启动.
我知道像第二个看门狗程序那样的解决方法,但我真的希望使用Windows错误报告API的工具尽可能简单地解决这个问题.
是否有.Net API可以将Windows错误报告集成到我的应用程序中?
即使我的应用程序中发生非灾难性错误,我也最感兴趣的是启动错误报告,而我所能找到的只是WIN32 API.
我想知道是否有办法从Java内部"内部"使用Windows错误报告?
换句话说,使用该机制将异常报告回中央位置而不会导致实际的JVM崩溃(据我所知,这首先触发了这一点).
这里的想法是更容易从Windows用户收集错误报告.
如果它可以成为受控关机的一部分,我也想听听.即不是JVM崩溃,而是从Java程序正常,受控制的退出.
仔细想想之后,我认为为我们的目的创建一组文本文件(或者只是在单个文本流中管道)到位于我们文件系统内部的小型Windows应用程序就足够了.然后,所述Windows应用程序突然崩溃并导致发送报告,包括我们提供的文本.那会有用吗?
我有几个在WinQual注册的程序,并且已成功跟踪通过WER发送的崩溃报告.微软更新到WinQual后,我在新网站上找不到任何我的程序.
那么我的问题是什么?我在新网站上找不到任何可以发送电子邮件支持的网站.在微软"更新"WinQual之后,也许其他人有过相同的经历并且知道如何恢复或查看已注册的程序?
非常沮丧,不能与微软联系.
注意:我对禁用WER 不感兴趣,我对WER未启动的崩溃场景感兴趣,尽管它应该和Windows"默默地"终止应用程序.
在Windows XP上,编写一个C或C++应用程序(在用户模式下)是非常简单的,它会以这样的方式混淆自己的地址空间,当最终引发访问冲突(或其他未处理的Win32异常)时,Windows XP将会只是默默地终止进程而不通知用户:
...
void stackbreaker() {
printf("%s\n", __FUNCTION__);
// global/static buffer
static char buf[128] = "In a hole in the ground there lived a hobbit. And it burrowed through your stack. It even built a round door into you function.";
// Get address on the stack
char local;
char* stack = &local;
// nuke the stack:
memcpy(stack - 64, buf, sizeof(buf));
// Kaboom. No user defined unhandled exception filter will …Run Code Online (Sandbox Code Playgroud) winapi unhandled-exception visual-c++ windows-7 windows-error-reporting
当在安装时在.NET托管应用程序上执行ngen,并从应用程序的Windows错误报告中检索崩溃转储时,如何使用它来查看堆栈跟踪,变量等?
以下是与该问题相关的一些背景知识:我们有一个.NET应用程序,可以在安装时使用.当由于未处理的.NET异常而崩溃时,崩溃将在Windows错误报告中进行存储,从中我可以从winqual.microsoft.com下载minidump.mdmp文件.
我将minidump.mdmp放在一个包含.dbg文件的文件夹中,用于构建崩溃的应用程序,然后双击minidump.mdmp在VS2008 SP1的新实例中打开它.我的堆栈跟踪如下所示:
kernel32.dll!RaiseException()+ 0x3d bytes
mscorwks.dll!RaiseTheExceptionInternalOnly()+ 0x295 bytes
mscorwks.dll!JIT_Throw()+ 0x130 bytes
MyApp.ni.exe!000007feee74c84c()
[下面的框架可能不正确和/或缺失,没有为MyApp.ni.exe加载的符号]
0000000070000d5e()
MyApp.ni.exe!000007feee611000()
000000000300bf78()
000000000300bf60()
模块窗口指示为OS和.NET DLL加载符号,但对于应用程序模块,我得到:
MyApp.exe - >符号文件中没有本机符号.
MyApp.ni.exe - >找不到匹配的二进制文件.
MyAppsLibrary.ni.dll - >找不到匹配的二进制文件.
我只想恢复我自己的32位应用程序的崩溃转储.
我尝试了以下方法:
我按照MSDN"收集用户模式转储"的步骤进行操作:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb787181%28v=vs.85%29.aspx
在互联网上的某个地方,我看到有关32位应用程序的WER注册表密钥的提及
不必添加HKLM\Software\WOW6432Node\Microsoft\Windows\Windows Error
Reporting\LocalDumps\
此..\Windows NT\AeDebug\Auto (REG_SZ)值必须为"0"
此外,我在
显示消息"检测到可能的堆损坏(代码3221225477)"下
的"系统事件查看器"中有WER错误条目"Windows Logs\Applications&Services\Microsoft\Windows\WER-Diagnostics\Operational"
我不知道这条消息是否与我的测试应用程序创建NPE有关,或者这是否是WER本身有问题?
我只是无法让它工作:(谁能给我一些线索?
更新: 对于另一台新的2008R2 x64机器,我刚刚做了
HKLM\Software\... Reporting\LocalDumps\DumpFolder = "c:\crashdumps"
HKLM\Software\... Reporting\LocalDumps\DumpType = 2 (REG_DWORD)
HKLM\Software\... Reporting\LocalDumps\DumpCount = 20 decimal (REG_DWORD)
Run Code Online (Sandbox Code Playgroud)
并且运行nulpointer-terster按预期工作.
所以我认为必须在这些其他机器中设置禁止使用LocalDumps的设置,尽管LocalDumps注册表键在那里.
windbg crash-dumps windows-server-2008 windows-server-2008-r2 windows-error-reporting
我正在体验来自我的C#应用程序的APPCRASH.运行时给出错误消息"此应用程序已请求运行时以不寻常的方式终止它".然后,当我点击好的时候,我得到一个"MyApplication已经停止工作"的消息,通常是"在线检查解决方案","关闭程序"和"调试程序"选项.当我点击"其他详细信息"时,我会收到APPCRASH签名,其中包含许多其他信息.其中一些是人类可读的,有些只是十六进制数字."例外代码"是40000015.还有"附加信息"行.我的问题是:宇宙中的任何人都知道APPCRASH消息中的信息意味着什么吗?
这个消息似乎是由能够从中汲取原因的人阅读的.在搜索答案时,我发现很多人发布的格式完全相同.不幸的是,我没有找到这些信息含义的解释.
此外,我已经尝试了"调试程序"选项,但它没有用.它只是让我进入系统dll,我的代码在调用堆栈的任何地方都没有.我已经调查过了,这个系统代码中没有出现错误.
APPCRASH消息将另一个dll命名为"故障模块"(此代码使用了大量外部dll),并且可能发生致命错误.但是这些信息不是很有用,因为我需要在我的代码中找到对外部dll进行错误调用(或将其置于错误状态)的位置.可悲的是,当我说"我的代码"时,我只是指我正在使用的代码.这是几十年来由几十个人编写的巨大代码库,因此我不能仅仅猜测可能会致命致电的地方.这就是我希望从APPCRASH消息中获取更多信息的原因.这也是我对细节非常吝啬的原因.整个事情都是非常专有的,有很多繁文缛节.这也是我没有发布APPCRASH消息内容的原因.
要清楚,我不是要求你为我调试我的问题.我没办法给你一个可重复的错误案例,我不是要求任何人在我的具体情况下告诉我错误的原因.我只是想知道如何解释那些十六进制数字,我找不到任何文档.