问题标签 [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 - 为什么 Microsoft 生态系统元数据交换需要在 Windows 10 上提升管理员权限?
使用“Microsoft 生态系统元数据交换 (EMX)”工具(用于为 Windows 错误报告注册应用程序的工具),尝试扫描任何文件会将以下消息记录到“应用程序日志”系统日志中:
我使用 EMX 的 powershell 绑定得到了相同的结果。
如果我从提升的命令提示符运行 powershell 绑定的工具本身,它确实可以工作。
我认为这是一个最近的问题(Windows 10?),因为文档没有提到这个问题,并且该工具本身在启动时没有给出任何错误。
要求提升的限制在 Windows 10 中是否发生了变化,我可以通过某种方式解决吗?(即,我可以让它在没有海拔的情况下以某种方式工作吗?)
debugging - 从 minidump 中存储的异常上下文中检索堆栈跟踪(类似于 .ecxr; k)
从 Windows 错误报告获得的转储通常在故障线程上设置了一个无用的当前上下文,并在WerpReportFault
. 异常发生时的实际上下文可以用.ecxr
-- 检索,它还设置上下文,使同一线程上的后续命令(例如k
)返回“正确”信息。
我正在构建一个用于自动转储分析的工具,用于IDebugControl::GetStackTrace
获取故障线程的堆栈。我可以使用IDebugControl4::GetStoredEventInformation
. 如果我使用存储上下文中的 EBP/RBP、ESP/RSP、EIP/RIP 值GetStackTrace
,我会得到正确的堆栈。但是,我更愿意复制.ecxr
命令的作用,设置“正确”状态,直到切换线程。我尝试使用IDebugAdvanced::SetThreadContext
,但这似乎是转储目标的非法操作,并且失败并显示 0x8000FFFF。
我试图通过调试一个 WinDbg 实例来弄清楚.ecxr
它的作用,它看起来像是.ecxr
在dbgeng!DotEcxr
. 但是,通过跟踪它(使用wt
),我无法理解它如何重置当前线程的上下文。无论如何,它似乎没有调用任何 COM 调试客户端接口方法,并且不使用IDebugAdvanced::SetThreadContext
.
任何有关如何在转储文件中设置线程上下文的建议将不胜感激。作为最后的手段,我总是可以使用IDebugControl::Execute
并简单地调用.ecxr
命令,但我更喜欢更编程的方法。
debugging - 从堆栈上有 WerReportFault() 的小型转储中获取信息
我的堆栈中有故障转储,但WerpReportFault()
它们看起来并不像我期望的那样。
我的期望
如果已经看到WerpReportFault()
0x80000003 断点,并且我能够使用 WinDbg 使用不同的异常指针重新转储,这些异常指针取自传递给WerpReportFault()
.
我很确定这以前是有效的,因为我什至在我的回答中推荐了这一点。还有其他网站建议使用这种技术,例如James Ross
我目前的观察
我正在分析的转储内部有一个“普通异常”,例如访问冲突:
但他们仍然有WerpReportFault()
作为堆栈:
参数 2 似乎不是一个在.dump
命令中使用的好的异常指针。
问题
是什么导致了我遇到的问题,我该如何解决?我知道这一定是可能的,因为!analyze -v
可以告诉我真正的调用堆栈。
是因为 Visual Basic 6 和未处理的异常过滤器吗?
我真的很想有一个很好的调用堆栈,因为我所有的手动调试和我所有的脚本都被破坏了,它们依赖于k
和!clrstack
类似的。他们无法WerpReportFault()
在堆栈上处理。
正如您可以从 VB6 依赖项中想象的那样,所有转储都是 32 位的。
visual-studio-2013 - 为什么在安装了 Visual Studio 的情况下,Windows 错误报告会为每次崩溃创建两个小型转储文件?
我按照这些说明在 Windows 10 机器上设置了小型转储收集。我设置了以下键:
该"C:\CrashDumps"
文件夹是为forACL
设置的。full access
Everyone
现在,当我使用运行以下 C++ 代码的故意崩溃的应用程序对其进行测试时:
该应用程序崩溃,但随后我.dmp
在文件夹中获得了两个文件:
这似乎只发生在安装了 Visual Studio 的情况下。
为什么这样做?是否有设置让它只创建一个迷你转储文件?
windows - 从 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 Error Reporting\DebugApplications:同上
将调用 exe 的循环设置为 SilentlyContinue
关闭错误报告如下:控制面板>操作中心>更改操作中心设置>问题报告设置>更改所有用户的报告设置>“从不检查解决方案”>确定>确定(这只会禁用“Windows可以在线检查。 ..”对话框)
不过,我得到了弹出窗口。还有另一个 reg 键,它完全禁用“程序已停止工作” UI,但我不想这样做,因为作为其他应用程序的开发人员,我需要知道事情何时崩溃。我只想从显示 UI 中排除这个脚本或它调用的 exe。
如果我能做到这一点,那么脚本可以在无人看管的情况下运行。
行为不端的 .exe 是来自此处的最新二进制版本:https ://github.com/ajryan/RptToXml ,并且在报告文件中遇到空字节时似乎失败。
这是我的代码:
conda - 用 Conda 安装 pkg: windows error(2,'系统找不到指定的文件)
在 Windows 7 64 位上,我正在尝试按照以下提示的建议使用 Conda (Python 2.7) 安装 Holoview:
但是,我不断收到以下消息。
在尝试安装软件包之前我应该做什么?
visual-c++ - 每个应用程序禁用 WER“已停止工作”对话框
我有一个带有我自己的未处理异常处理程序的 VC++ 应用程序。我想防止出现崩溃时出现 WER“程序已停止工作”消息框。使用 SEM_NOGPFAULTERRORBOX 可以做到这一点,但它似乎也禁用了 WER,因此没有任何内容存储在事件日志中。我希望 WER 能够正常工作以存储事件,但只是阻止消息框出现。
听起来注册表项 DontShowUI=1 可能会这样做,但它似乎对整个机器或用户来说是全局的。所以它会影响用户可能运行的所有其他应用程序。
有没有办法做到这一点,但只适用于我的一个应用程序/exe?
windows - 如何仅为一个进程启用 Windows 错误报告 LocalDumps,而不是系统范围
Windows 中的用户模式转储收集功能有据可查。只要创建了LocalDumps
under 键HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting
,系统上的每个应用程序崩溃都会使用默认设置生成核心转储。它下面的一个子项,以我感兴趣的进程的可执行文件命名,正在覆盖全局(默认)设置,我只是名义上得到故障转储,在我指定的位置完全内存打嗝。
但是,在文档中显然没有设置LocalDumps
可以告诉系统不要创建转储,这样我就可以为我的服务的子键覆盖一个。在我们的环境中,有多个服务进程在多个身份下运行,因此将有许多核心转储分散在所有身份的%LOCALAPPDATA%\CrashDumps
目录中,这是不必要的。这些是无人值守的服务器,更多的垃圾意味着更多的脚本清理。
是否有记录的方法可以默认为所有程序禁用核心转储,并仅对一个程序覆盖禁止?
据记录,如果崩溃进程的身份不可写该位置,则不会创建转储,但我也不希望它们用于 LocalSystem 服务,而且这个人可以在任何地方写。此外,如果指向无效的文件路径,似乎不会创建转储。DumpFolder
为了让它更不那么老套,我将它设置为NUL
设备命名空间中的设备(:
代表下面的“键下的值”):
这表面上适用于 Server 2012、2012R2 和 2016。但我必须确保下一次更新不会改变这种(未记录的)行为。
windows - 发生未处理的异常时如何防止创建“.mdmp”和“.hdmp”文件
我们的 C# 控制台应用程序运行良好。此应用程序在内部运行一些 C++ dll。有时,我们会遇到 C5 错误(底层 dll 的未知 C++ 错误)或未处理的 C# 异常,它们都会终止应用程序。(我在 Windows 事件日志中看到了它)。
问题不是错误,而是在 Windows 的 Temp 文件夹中生成的转储文件。它填满了我们的磁盘(空间非常低的虚拟磁盘),并导致其他正在运行的应用程序失败。这是 2 个带有“.mdmp”和“.hdmp”扩展名的文件。它们占用大约 500MB。我在互联网上读到这些与“Windows 错误报告”有关,但我检查了我们的 Windows 设置(服务器管理器->本地服务器)并且它已关闭。
我还将 C# 控制台应用程序的构建设置更改为:“内部编译器错误报告”为“发送”;希望它将转储文件发送到它打算发送的某个地方并且不为后者保存它,但是临时文件仍然在磁盘上生成。我想我应该把它改成“无”。
如果有办法停止创建这些临时文件,请帮助我。
谢谢先进