首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DebugDiag转储不包含.NET异常,这取决于某些代码

DebugDiag转储不包含.NET异常,这取决于某些代码
EN

Stack Overflow用户
提问于 2021-01-26 14:30:20
回答 1查看 220关注 0票数 1

我试图使用DebugDiag创建一个转储,该转储将包含未处理的.NET异常的信息。

转储文件的创建似乎依赖于正在运行的代码,我不明白为什么。

以下是我所采取的步骤:

  1. 使用以下代码准备一个名为DebugDiagTest的简单控制台应用程序,该应用程序将引发InvalidOperationException异常: 使用系统;命名空间DebugDiagTest {类程序{静态空洞主(string[] args) { if ( shouldAwaitKeyPress ( args) ) Console.ReadLine();抛出();}静态空抛(){抛出新的InvalidOperationException();}静态bool ShouldAwaitKeyPress(string[] args){ var shouldAwaitKeyPress= false;如果(args.Length > 0) { bool.TryParse(args,out shouldAwaitKeyPress);}返回shouldAwaitKeyPress;}
  2. 使用DebugDiagTest.exe true,运行编译和,不要按任何键;让它等待键按下(步骤4)。
  3. 准备一个DebugDiag异常规则(您可以遵循这篇文章)。
  4. 回到正在运行的DebugDiagTest.exe,然后按一些键使它崩溃。
  5. 转到C:\Program Files\DebugDiag\Logs\Crash rule for all instances of DebugDiagTest.exe,您将看到一个.dmp文件。
  6. 现在,使用DebugDiagTest.exe false,运行再次转到C:\Program Files\DebugDiag\Logs\Crash rule for all instances of DebugDiagTest.exe,您将看到没有创建.dmp文件。

现在,您可以任意时间重新运行DebugDiagTest.exe true,并看到每次都会创建一个转储文件。但是,重新运行的DebugDiagTest.exe false从不创建转储文件。

我的问题:

为什么运行DebugDiagTest.exe true会创建转储,而DebugDiagTest.exe false不会创建转储?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 19:03:19

DebugDiag需要附加到您的应用程序。当您在启动过程中崩溃过快时,DebugDiag还没有连接到您的进程中,您也不会从中得到任何转储。

在这种情况下,更容易设置Windows错误报告的某些注册表项,以使进程在未处理异常情况下退出时,所有或仅为您的exe都能完全转储。有关更多细节,请参见https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
Reg_Expand_SZ DumpFolder e.g. %temp%\WERDumps
DWORD         DumpType   2 is full dump
DWORD         DumpCount  e.g. 10 to keep the last 10 crashed full dumps

您还可以创建一个子项。

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApplication.exe 

只为您的可执行文件配置转储报告。

如果您想根据特定的异常对转储进行筛选,可以使用SysInternals的procdump,它允许您对例如,每个InvalidOperationException进行一个完整的内存转储。

代码语言:javascript
复制
procdump -ma -e 1 -f InvalidOperationException myApp.exe

确保检查扩展的帮助通过

代码语言:javascript
复制
procdump -? -e

这将给你一个概述,它有多强大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65903245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档