gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:41:16 24 4
gpt4 key购买 nike

我依赖 Windows Error Reporting为大型多线程应用程序创建完整的用户模式转储。我知道当我开始使用它时(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

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

此外,通过调用“RaiseFailFastException”终止应用程序仍然会产生一个良好的转储,其中包含所有线程的有效堆栈。

最佳答案

啊哈!第三方库正在调用 SetUnhandledExceptionFilter,这会阻止 Windows 错误报告获取原始异常。他们的处理程序进行了一些内部清理,然后调用中止,此时 WER 终于能够创建转储。

对于遇到此类问题的任何人,我建议检查安装的处理程序(SetUnhandledExceptionFilter、set_terminate 等的返回值)是否符合您的预期(如果您依赖 WER,则为空,或者您自己的处理程序或 CrashRpt) .

关于c++ - Windows 错误报告何时创建转储文件?它是可配置的吗?这在 Windows 7 中有变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com