我的C#应用程序出现APPCRASH。运行时会给出一条错误消息:"此应用程序已请求运行时以异常方式终止它"。然后,当我单击"确定"时,我会收到一条"我的应用程序已停止工作"消息,其中包含通常的"联机检查解决方案"、"关闭程序"one_answers"调试程序"选项。当我点击"附加详细信息"时,我会得到APPCRASH签名,其中包含许多附加信息。其中有些是人类可读的,有些只是十六进制数字。"异常代码"为40000015。还有几行"附加信息"。我的问题是:宇宙中有人知道APPCRASH消息中的信息意味着什么吗?
这条消息似乎是由一个能从中推断原因的人来阅读的。在寻找答案时,我发现很多人发布的消息格式完全相同。不幸的是,我没有找到关于这些信息意味着什么的解释。
此外,我也尝试过"调试程序"选项,但它没有帮助。它只是把我放在系统dll中,调用堆栈中没有任何代码。我已经调查过了,这个系统代码中没有出现错误。
APPCRASH消息将另一个dll命名为"故障模块"(此代码使用了大量外部dll),致命错误可能发生在那里。但这些信息并没有太大帮助,因为我需要在代码中找到对外部dll进行错误调用(或使其处于错误状态)的位置。遗憾的是,当我说"我的代码"时,我只是指我正在使用的代码。这是一个由几十个人在几年内编写的庞大的代码库,所以我不能仅仅猜测可能做出致命决定的地方。这就是为什么我希望从APPCRASH消息中获得更多信息。这也是为什么我对细节非常吝啬的原因。整个事情都是非常专有的,有很多繁文缛节。这也是我没有发布APPCRASH消息内容的原因。
需要明确的是,我并不是要求你为我调试我的问题。我没有办法给你一个可重复的错误案例,我也没有要求任何人告诉我特定案例中错误的原因。我只是想知道如何解释这些十六进制数字,但我一直找不到任何文档。
以下是应用程序崩溃消息的示例:
Problem signature:
Problem Event Name: APPCRASH
Application Name: WINWORD.EXE
Application Version: 12.0.4518.1014
Application Timestamp: 45428028
Fault Module Name: StackHash_7ae5
Fault Module Version: 6.0.6000.16386
Fault Module Timestamp: 4549bdc9
Exception Code: c0000374
Exception Offset: 000af1c9
OS Version: 6.0.6000.2.0.0.256.4
Locale ID: 1033
Additional Information 1: 7ae5
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de
Additional Information 3: 333f
Additional Information 4: 583336399425ab3efc33bdfbb60895ee
应用程序名称和应用程序版本很简单,时间戳也是如此(这是文件资源管理器中更改的日期,编码为32位Unix时间戳值)。故障模块通常是一个dll名称,异常偏移量是导致错误的dll中硬件指令的偏移量地址。在这种情况下,这是一个内部运行时错误,无法检索到有效的模块,因此我们得到了StackHash,而不是实际值。版本是Windows中可执行文件的普通PE版本字符串。区域设置ID是正在使用的全球化设置库:1033是en-US。
可以在此处解释异常代码。在本例中,错误为STATUS_HEAP_CORRUPTION。
附加信息字段是不透明的数据,并且基于异常代码。我不知道关于这些字段的任何有用信息,很可能没有,而且这些字段很可能是故意未记录的,这样微软就可以根据需要对其进行更改。这些字段通常是大量信息的md5散列。。。它基本上是这样的,因此可以通过哈希码快速比较许多信息是否相同/不同,这样你就可以知道错误是否是由相同的执行状态引起的。
这意味着您有一个未捕获的未处理异常,它正在崩溃您的应用程序。
如果它在调试模式下工作,您需要查看发布版本的不同之处。所有的图书馆都有吗?你有你的app.config设置吗?
有关详细信息,请查看Windows日志->应用程序下的事件查看器。
如果您设置了一个异常处理程序,您将获得更好的信息,例如堆栈跟踪。
您需要生成一个可以在事后分析的crashdump。您需要对注册表进行一些更改,然后才能使用Visual Studio分析转储文件。希望这能给你更多的线索,比如失败的特定功能。
有关详细信息,请访问此网站:http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html
您将设置DebugDiag,一个来自微软的工具。
让我知道事情进展如何,或者你是否找到了更好的工具。
问候,
Dave
.net中有一个很好的功能,托管调试器助手,用于解决本机和托管代码互操作问题MSDN关于在此处使用它的文章
MDA引发的异常可以在VisualStudio异常视图窗口中进行配置。