标签: windows-error-reporting

Windows错误报告在哪里创建转储文件

我只是想知道WER写入转储文件的位置?这个位置也是特定于OS的吗?

windows windbg windows-error-reporting

6
推荐指数
1
解决办法
2万
查看次数

Windows错误报告何时创建转储文件?它是可配置的吗?这在Windows 7中有变化吗?

我依靠Windows错误报告为大型多线程应用程序创建完整的用户模式转储.我知道当我开始使用它时(2012年初),这些转储包含所有应用程序内存,并且所有线程的完整堆栈在应用程序崩溃时都是准确的(抛出未处理的异常等).但是在去年的某个未知点上,WER创建的崩溃转储已经发生了变化.它们仍然包含所有内存,但只显示一个线程,并且堆栈似乎是进程已经关闭之后来自:

    ntdll.dll!_LdrpCallInitRoutine@16()  + 0x14 bytes   
    ntdll.dll!_LdrShutdownProcess@0()  + 0x141 bytes    
    ntdll.dll!_RtlExitUserProcess@4()  + 0x74 bytes 
    kernel32.dll!_UnhandledExceptionFilter@4()  + 0x18928 bytes 
Run Code Online (Sandbox Code Playgroud)

这是一个使用VS2010 SP1编译的非托管(无法管理?)32位C++应用程序,在64位Win7 SP1上运行(并保持更新).有谁知道在去年改变了WER行为的任何Windows更新?除了'HKLM\SOFTWARE\Microsoft\Windows\Windows错误报告\ LocalDumps\AppName.exe'之外,还有其他可配置的东西吗?

此外,通过调用'RaiseFailFastException'来终止应用程序仍然会导致所有线程都有一个有效堆栈的良好转储.

c++ windows crash-reports windows-error-reporting

6
推荐指数
1
解决办法
1994
查看次数

如何找到"访问冲突"的来源

简而言之,我有一个C#应用程序执行大量mciSendString调用(通过dllimport)来控制wav文件播放(基本上是打开,播放,暂停,停止,状态,关闭).运行一段时间后,应用程序崩溃,恕不另行通知"访问冲突".

即使我从我的vs2012运行应用程序,视觉工作室也没有抓住异常.即使有'强行突破异常'选项,我也没有运气从vs2012调试这个.所以我设置WER来生成崩溃转储,我使用windbg和psscor2.dll插件来调试它.

然后按顺序,使用以下命令,这是我得到的(为了可读性而缩短为必要的):

$>.ecxr

eax=00000001 ebx=00000000 ecx=00000401 edx=00000000 esi=049725b8 edi=00000002
eip=4e88159e esp=0a4efa38 ebp=0a4efa54 iopl=0         nv up ei pl nz ac pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010216
<Unloaded_mciwave.dll>+0x159e:
4e88159e ??              ???
Run Code Online (Sandbox Code Playgroud)

$>〜*KB

#  19  Id: 105c.28cc Suspend: 1 Teb: 7ef06000 

Unfrozen
user32!NtUserGetMessage+0x15
user32!GetMessageA+0xa1
winmm!mciwindow+0x102
kernel32!BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x70
ntdll!_RtlUserThreadStart+0x1b

# 30  Id: 105c.15f8 Suspend: 0 Teb: 7ef1b000 Unfrozen
ntdll!ZwWaitForMultipleObjects+0x15
KERNELBASE!WaitForMultipleObjectsEx+0x100
kernel32!WaitForMultipleObjectsExImplementation+0xe0
kernel32!WaitForMultipleObjects+0x18
kernel32!WerpReportFaultInternal+0x186
kernel32!WerpReportFault+0x70
kernel32!BasepReportFault+0x20
kernel32!UnhandledExceptionFilter+0x1af
ntdll!__RtlUserThreadStart+0x62
ntdll!_EH4_CallFilterFunc+0x12
ntdll!_except_handler4+0x8e
ntdll!ExecuteHandler2+0x26
ntdll!ExecuteHandler+0x24
ntdll!RtlDispatchException+0x127
ntdll!KiUserExceptionDispatcher+0xf
WARNING: Frame IP not in any known …
Run Code Online (Sandbox Code Playgroud)

windbg winmm access-violation mci windows-error-reporting

6
推荐指数
1
解决办法
7767
查看次数

未处理的异常和werfault

考虑一下我们有这段代码:

static void Main(string[] args)
{
    try
    {
        throw new Exception("Exception");
    }
    catch
    {
        throw;
    }
    finally
    {
        Console.WriteLine("------finally-----");
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有未处理的异常和finally阻止.

werfault启用后,当我Cancel尝试"自动解决问题"时按下,最后执行块.

但是,如果我没有按下Cancel并在下一个窗口中单击Close The Program finally块不执行.

最后当我禁用werfault并点击Close Program finally块执行时.

我没有在c#规范中找到描述这种情况的任何文档.我也发现了这个MSDN:

在未处理的错误之后执行finally块取决于如何触发异常展开操作.

但没有解释,任何人都可以描述为什么会这样?

更新1:我已在.Net Framework 4.5.1和4.5.2中测试过它.

c# exception-handling windows-error-reporting

6
推荐指数
1
解决办法
1404
查看次数

从Powershell调用.exe时如何防止"程序停止工作"对话框

我正在开发一个PS脚本来生成大量Crystal Reports(Windows 7)的.xml表示.在这个脚本中,我创建了一个对象,表示需要解析的所有文件,然后循环遍历它们,逐个调用它们.exe.偶尔,这个.exe崩溃了.这很好,因为它非常罕见,无法处理的报告可以手动标记和审核.问题是我有数千个.rpt文件要处理,当.exe崩溃时,Windows会弹出一个对话框,要求调试或继续.

在此输入图像描述

我为解决问题而尝试的事情:

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows错误报告\ DebugApplications:我在这里输入我的exe名称并将值设置为0(不调试)

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows错误报告\ DebugApplications:与上面相同

  • 将调用exe的循环设置为SilentlyContinue

  • 关闭错误报告,如下所示:控制面板>操作中心>更改操作中心设置>问题报告设置>更改所有用户的报告设置>"从不检查解决方案">确定>确定(这仅禁用"Windows可以在线检查". .."对话框)

不过,我正在接收弹出窗口.还有另一个注册表项,它完全禁用"程序已停止工作"UI,但我不想这样做,因为作为其他应用程序的开发人员,我需要知道什么时候崩溃.我只是想从显示UI中排除这个脚本或它调用的exe.

如果我能做到这一点,那么脚本可以无人值守运行.

行为不端的.exe是最新的二进制版本:https://github.com/ajryan/RptToXml,当它在报告文件中遇到空字节时似乎失败了.

这是我的代码:

[xml]$MainConfigFile = Get-Content "settings.config.xml"
[xml]$SSRSConfigFile = Get-Content "ssrs.config.xml"
[xml]$CrystalConfigFile = Get-Content "crystal.config.xml"

# create settings objects from xml objects
$MainSettings = @{
    OutputPath = $MainConfigFile.Settings.OutputPath
    SearchString = $MainConfigFile.Settings.SearchString
    ParseCrystal = $MainConfigFile.Settings.ParseCrystal
    ParseSSRS = $MainConfigFile.Settings.ParseSSRS
}

$CrystalSettings = @{
    InputFolderPath = $CrystalConfigFile.CrystalSettings.InputFolderPath
    ContinueOnError = $CrystalConfigFile.CrystalSettings.ContinueOnError
}

$RsSettings = @{
    ReportServerUri = $SSRSConfigFile.RsSettings.ReportServerUri
    RsVersion = $SSRSConfigFile.RsSettings.RsVersion
}

Clear

Write-Host "Ensure these settings are …
Run Code Online (Sandbox Code Playgroud)

windows powershell windows-error-reporting

6
推荐指数
1
解决办法
837
查看次数

在Windows 7上获取有用的错误消息

在Windows XP开发期间,如果我的应用程序遇到未处理的异常,它将显示错误消息"X遇到并出现错误..."并为我提供启动调试器的选项.在Windows 7下,我得到的是一条消息"X已停止工作,Windows正在检查解决方案".

我再也看不到错误消息的任何细节了,我没有给出调试选项.

我正在使用VS2005,并且据我所知,JIT调试已启用.

反正有没有回到WinXP的有用错误消息?

编辑:它只是一个标准的WinForms桌面应用程序,无需运行任何特殊权限.

c# visual-studio-2005 windows-7 windows-error-reporting

5
推荐指数
1
解决办法
525
查看次数

LocalDumps注册表项停止工作(Windows错误报告)

如MSDN所述,我设置了注册表项HKLM \ SOFTWARE \ Microsoft \ Windows \ Windows错误报告\ LocalDumps 。

我有一个测试程序-一个用Visual C ++编译的控制台程序,该程序尝试在打印消息并退出之前取消引用NULL指针。该测试程序曾经用于退出和转储核心文件,但现在它刚刚退出。我没有核心。

我在物理硬件上运行Windows Server 2008 R2 Enterprise SP1。

我不知道发生了什么变化。有什么变化可以阻止WER现在转储内核?

windows crash-dumps windows-error-reporting

5
推荐指数
1
解决办法
3056
查看次数

Windows 错误报告有时不会为 .NET 4 应用程序生成小型转储

我正在尝试诊断 .NET 4 应用程序的崩溃问题。上次它在用户机器上崩溃时,Windows 错误报告不会收集应用程序的小型转储。我检查了DumpFolder注册表,我可以找到旧崩溃的转储文件,但最后一个没有新的转储文件。

崩溃的事件日志说:

应用程序:MyApp.exe
框架版本:v4.0.30319
描述:由于 IP 000007FEEC0F25E8 (000007FEEC0B0000) 的 .NET 运行时出现内部错误,退出代码为 80131506,该进程被终止。

通过一些搜索看起来像是 CLR x64 中并发 GC 的一个著名错误。事件日志也不同于以前的崩溃。在之前的事件日志中,他们明确表示发生了“访问冲突”。退出代码是一样的。

我无法使用adplusprocdump获取故障转储,因为它们会显着降低性能。我想知道为什么这次 WER 没有得到 mini dump?

.net clr crash-dumps windows-error-reporting

5
推荐指数
1
解决办法
2140
查看次数

Windows 错误报告“AppHangTransient”事件

我们的一位客户报告了我们的 .NET 应用程序的性能问题。

我们要求他们检查他们的 Windows 事件日志,并注意到 Windows 错误报告记录了几个与应用程序相关的信息级别条目。“AppHangTransient”对 WER 意味着什么?建议可能是挂起是暂时的,但我找不到书面确认。

故障桶,类型 0

事件名称:AppHangTransient

回应:不可用

驾驶室 ID:0

.net freeze windows-error-reporting

5
推荐指数
0
解决办法
3378
查看次数

WER 报告的神秘 IL 偏移

我正在尝试解析 Windows 错误报告报告(Report.wer)。

\n\n

以下是报告的一部分:

\n\n
Version=1\nEventType=CLR20r3\n\n... snip ...\n\nSig[0].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 01\nSig[0].Value=myapp.exe\nSig[1].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 02\nSig[1].Value=2.2.0.1\nSig[2].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 03\nSig[2].Value=541bc264\nSig[3].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 04\nSig[3].Value=System\nSig[4].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 05\nSig[4].Value=2.0.0.0\nSig[5].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 06\nSig[5].Value=4a275e12\nSig[6].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 07\nSig[6].Value=2919\nSig[7].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 08\nSig[7].Value=ef\nSig[8].Name=\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d 09\nSig[8].Value=System.IO.IOException\n\n... snip ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

(其中的\xe5\x95\x8f\xe9\xa1\x8c\xe3\x81\xae\xe7\xbd\xb2\xe5\x90\x8d意思是Problem Signature。)

\n\n

由 SO 教授破译 .NET clr20r3 异常参数 P1..P10,我发现:

\n\n
    \n
  • 错误的程序集版本为System2.0.0.0。
  • \n
  • 故障方法标记为06002919
  • \n
  • 故障 IL 偏移量为ef
  • \n
\n\n

但问题是IL偏移值ef

\n\n

06002919的方法System没有IL_00ef

\n\n

这是该方法的定义06002919

\n\n
  .method /*06002919*/ assembly hidebysig \n          instance bool  Poll(int32 microSeconds,\n                              valuetype System.Net.Sockets.SelectMode/*0200059D*/ …
Run Code Online (Sandbox Code Playgroud)

.net c# windows-error-reporting

5
推荐指数
1
解决办法
289
查看次数