问题标签 [windows-error-reporting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-error-reporting - 为 Windows 错误报告映射产品数据
如此处所述,WinQual 已为 Windows 错误报告移动和映射产品数据,必须使用 Microsoft 生态系统元数据交换 (MEME) 完成。
在我们的自动构建过程中,一个脚本为 Winqual 创建了 XML 文件并自动进行了上传。现在 MEME 提供了一组 powershell cmdlet 来从产品二进制文件创建映射文件。
到目前为止,除了这篇文章,我找不到任何有关此 cmdlet 的文档。不幸的是,那里描述的 powershell 脚本似乎没有正确设置公司名称。
谁能提供更好的文档?
windows - 自定义错误报告(XP 及以上)
这是一个有点复杂的问题,有几个问题。随意只回答您有答案的问题。
我的任务是在我们的几个组件出现 Windows 异常的情况下创建小型转储,并支持 XP SP3 作为最小操作系统。组件包括:
- 独立的 C++ 应用程序
- 在已知浏览器中使用的 CSP 和 PKCS11 库 (DLL)
- 一个 UI 和一个非 UI 服务
- 静态库,前面三点都用到
要求是拥有类似 WER(从 XP 开始)之类的东西,但是将报告发送到专用供应商服务器,而不是 Microsoft 当前的 Winqual 等效服务器。如果可以将报告功能包装在一个静态库中,那就太好了。
不过也有问题。DLL 是特殊的野兽。仅当 DLL 代码中发生故障时如何生成报告?服务可能还需要一些特殊处理,我目前不知道。
首先,是否有一个已知的开源库可以帮助我完成这项任务?如果没有,我将不得不自己动手。
我的第一个想法是在我的每个模块中都有一个睡眠看门狗线程。该线程只是等待一个事件,该事件将从未处理的异常过滤器中设置。该线程将使用MiniDumpWriteDump生成报告,通过互联网发送它然后完成,在提到的过滤器中,我们将等待线程结束,然后终止进程。对此解决方案有任何想法吗?比如本地系统账户下的Windows服务能不能上网?
.net - 如何使用 VS2010 分析 WER 收集的 .NET 应用程序崩溃转储?
我有一个 NET 4.0 应用程序,它在运行时会导致未处理的异常。当我从 VS2010 运行它时,它会在异常行上中断,我可以保存转储。当我稍后加载转储时,我准确地到达了崩溃的地方,并且能够看到局部变量的值。
我已经在 Win 7 中启用了故障转储收集(即使禁用了 Windows 错误报告也会收集用户模式转储)。
当我加载由 WER 创建的转储时,我只能看到本机代码中发生异常的位置(即使我开始混合模式调试)。
是否有可能实现与 WER 和 VS 转储类似的行为?
windows-server-2008 - Win2008 R2 WER(报错)LocalDumps被什么阻止了?
我只想恢复我自己的 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 机器,我刚刚做了
并且运行 nulpointer-terster 按预期工作。
所以我认为这些其他机器中必须有一个设置禁止使用 LocalDumps,尽管 LocalDumps 注册表项在那里..
python - 我如何(使用 python)正确创建 ctypes 结构并将其传递给 WER API 函数?
首先,我发现了以下两个类似的问题:
在python ctypes中将结构传递给Windows API
第一个没有公认的答案,我认为我没有在单独的进程中做任何事情。第二个简单地指出了pointer() 和byref(),这两个我都试过没有用。
现在,关于我的问题:
我试图用我自己的 pReportInformation 调用函数 WERReportCreate (这是一个指向其第一个数据值是它自己的大小的结构的指针)。这会以各种方式失败,具体取决于我的处理方式,但我不确定如何正确执行。由于其中一个要求是结构知道它自己的大小,我不确定如何以编程方式确定(尽管如果这是唯一的问题,我想我现在已经猜到了正确的值,这一事实使情况变得复杂) )。WER API 的相关信息如下所示:
(完整信息在http://msdn.microsoft.com/en-us/library/windows/desktop/bb513625%28v=vs.85%29.aspx)
(完整信息在http://msdn.microsoft.com/en-us/library/windows/desktop/bb513637%28v=vs.85%29.aspx)
这是我尝试过的代码:
这是我得到的输出:
当我传入一个空值时它起作用,但当我实际传递我的(引用我的?)结构时它不起作用的事实表明我遇到了三个问题之一:我没有正确创建结构(我不确定wzConsentKey 定义正确),或者我没有正确计算出结构的大小(我实际上使用 struct.calcsize 和各种选项来获得初始猜测,并随机加减 1),或者我没有正确传递(参考到?)结构。
这是我遇到死胡同的地方。任何帮助将不胜感激(以及如何提高我的问题的清晰度、格式或质量的建议;这是我的第一篇文章)。
c++ - 在应用程序运行时禁用 WER
我正在开发一个不断打开 IE、执行任务、关闭它然后重复的应用程序。但是,如果 IE 在执行期间崩溃,系统准备继续进行下一次迭代,但是错误报告保持打开状态并且不允许进程完全关闭。这意味着它会继续占用内存,直到用户单击对话框说忽略错误。
目前我正在研究两种解决方案,使用 VectoredExceptionHandlers,以及完全禁用 WER 的能力。
我对 VectoredExceptionHandlers 的理解是,它们会拦截我的应用程序抛出的任何异常,并在它们进入 WER 之前对其进行处理。但是,由于崩溃实际上发生在我的应用程序启动的 IE 进程中,我不确定这些处理程序是否仍然能够阻止 WER 接收异常。
我也不希望像 StackOverflow 上的其他问题所建议的那样在系统上完全禁用 WER,我只希望在我的应用程序运行时禁用它。
有没有人对这些选项有更多的了解或有更好的方法来处理这个问题?
c# - APPCRASH 消息的详细信息是什么意思?
我在 C# 应用程序中遇到 APPCRASH。运行时给出“此应用程序已请求运行时以异常方式终止它”的错误消息。然后,当我单击确定时,我会收到一条“MyApplication 已停止工作”消息,其中包含通常的“在线检查解决方案”、“关闭程序”和“调试程序”选项。当我单击“附加详细信息”时,我得到了 APPCRASH 签名,其中包含许多附加信息。其中一些是人类可读的,其中一些只是十六进制数字。“异常代码”是 40000015。还有几行“附加信息”。我的问题是:宇宙中是否有人知道 APPCRASH 消息中的信息是什么意思?
似乎这条消息是为了让能从中推测出原因的人阅读。在搜索答案时,我发现很多人发布格式完全相同的消息。不幸的是,我没有找到有关此信息含义的解释。
另外,我尝试了“调试程序”选项,但它没有帮助。它只是把我放在系统 dll 中,而我的代码在调用堆栈中的任何地方都没有。我调查了一下,这个系统代码中没有出现这个错误。
APPCRASH 消息将另一个 dll 命名为“故障模块”(此代码使用了很多外部 dll),并且可能发生致命错误。但这些信息并不是很有帮助,因为我需要在我的代码中找到对外部 dll 进行错误调用(或将其置于错误状态)的位置。可悲的是,当我说“我的代码”时,我只是指我正在使用的代码。这是一个巨大的代码库,由几十个人在几年内编写,所以我不能只猜测可能导致致命呼叫的地方。这就是为什么我希望从 APPCRASH 消息中获得更多信息。这也是我对细节非常吝啬的原因。整个事情都是非常专有的,有很多繁文缛节。这也是我没有发布APPCRASH消息内容的原因。
需要明确的是,我并不是要你为我调试我的问题。我无法给你一个可重现的错误案例,我也没有要求任何人告诉我在我的具体案例中错误的原因。我只想知道如何解释这些十六进制数字,但我找不到任何文档。
windows - 如何收集应用程序故障转储
我需要收集一些特定应用程序的故障转储。我已经阅读了这篇文章,但不能说它对我有多大帮助。
平台:: WinXP、Vista 和 Win7。
似乎 WinXP 及更高版本收集转储的方式不同。例如,假设我想收集 IE 的所有转储文件,我应该遵循哪些步骤?
c# - 从异步任务中止当前进程
Task
我有一些通过 TPL以异步方式运行的复杂函数,有时可能会以意想不到的方式失败。当发生此类故障时,这表明可能导致程序状态损坏的编程错误。因此,我不希望我的程序捕获异常、处理它并“跛行”,我希望我的进程崩溃并终止。
我还希望这个东西以这样的方式死掉,即 Windows 错误报告系统将其检测为崩溃,并执行所有有用的调试操作,例如捕获小型转储、将其发送给 Microsoft 等。
我意识到这可能与您对程序在错误情况下应该做什么的看法背道而驰,但问题不在于那个。
我遇到的问题是,因为异常是从任务中引发的,所以它不会立即导致进程崩溃。一段时间后,当垃圾收集器根据自己的智慧决定收集“未观察到的”异常时,它会崩溃。
我希望该过程立即崩溃,因为...
- 来自实际错误的调用堆栈和线程转储是我想在故障转储中收集的
- 进程“一瘸一拐”并在稍后不确定的时间崩溃可能会导致进一步的损害,因为它将在可能损坏的程序状态下工作
- 用户对实际导致崩溃发生的操作感到困惑
所以,简而言之,问题是:
如何使我的进程从Task
使用 TPL 创建的 async 崩溃,以便 Windows 错误报告能够创建有用的小型转储?
提前致谢!
c++ - 我应该通过单独的进程编写自己的故障转储还是依赖 WER?
目前我的信息是(让我们将上下文保留在 Windows-7 中,因为 WER 在 Win-XP 上不能那样工作)我有两种方法可以为我的应用程序获取完整的内存崩溃转储:
我可以设置 WER 来生成我的应用程序的本地完整内存转储
信息在这里:http: //msdn.microsoft.com/en-us/library/bb787181%28v=vs.85%29.aspx
- 添加(也适用于 32 位应用程序。不要使用SysWow64 节点)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
密钥(可能是应用程序特定的子密钥...LocalDumps\MyApplication.exe
) - 设置
DumpType
为 2。 - 根据需要调整其他设置
注意:由于我们的应用程序是自定义部署的,因此设置此注册表值不是问题。
这似乎通过一个简单的演示应用程序为我提供了非常可靠的故障转储。
或者,我可以自己编写转储 - 正确使用看门狗进程和所有
我曾经MiniDumpWriteDump
编写转储文件,并通过看门狗进程(如此处、此处所述)来执行此操作,以最大程度地降低失败的风险。
问题
那么,哪种方法更好呢?鉴于这一点,当我自己做这件事时,我谨慎地将我在崩溃处理程序中所做的事情保持在绝对最低限度,我想知道 WER 方法是否同样可靠,或者 WER 方法是否在处理过程中做了更多可能的事情失败。有什么想法/经验吗?