我正在体验来自C#应用程序的APPCRASH。运行时给出错误消息“此应用程序已请求运行时以不寻常的方式终止它”。然后,当我点击好的时候,我得到一个“MyApplication已经停止工作”的消息,通常是“在线检查解决方案”,“关闭程序”和“调试程序”选项。当我点击“其他详细信息”时,我会收到APPCRASH签名,其中包含许多其他信息。其中一些是人类可读的,有些只是十六进制数字。 “例外代码”是40000015.还有“附加信息”行。我的问题是:宇宙中的任何人都知道APPCRASH消息中的信息意味着什么吗?
这个消息似乎是由能够从中汲取原因的人阅读的。在搜索答案时,我发现很多人发布的格式完全相同的消息。不幸的是,我没有找到这些信息的含义的解释。
另外,我尝试过“调试程序”选项,但它没有用。它只是让我进入系统dll,我的代码在调用堆栈的任何地方都没有。我已经调查过了,这个系统代码中没有出现错误。
APPCRASH消息将另一个dll命名为“故障模块”(此代码使用了大量外部dll),并且可能会发生致命错误。但是这些信息不是很有用,因为我需要在我的代码中找到对外部dll进行错误调用(或将其置于错误状态)的位置。可悲的是,当我说“我的代码”时,我只是指代我正在使用的代码。这是几十年来由几十个人编写的巨大代码库,因此我不能仅仅猜测可能会致命致电的地方。这就是我希望从APPCRASH消息中获取更多信息的原因。这也是我对细节非常吝啬的原因。整个事情都是非常专有的,有很多繁文缛节。这也是我没有发布APPCRASH消息内容的原因。
要说清楚,我不是要求你为我调试我的问题。我没办法给你一个可重现的错误案例,我不是要求任何人在我的具体案例中告诉我错误的原因。我只是想知道如何解释这些十六进制数字,而且我找不到任何文档。
答案 0 :(得分:11)
以下是应用崩溃消息的示例:
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。
可以解释异常代码here。在此示例中,错误是STATUS_HEAP_CORRUPTION。
附加信息字段是不透明数据,并且基于异常代码。我不知道有关这些字段的任何有用信息,可能没有,并且很可能这些字段是有目的的未记录的,以便Microsoft可以根据需要更改它们。这些字段通常是md5哈希的大量信息...它基本上存在,因此可以通过哈希码快速比较大量信息是相同/不同的,因此您可以知道错误是否是由于相同执行状态为另一种。
答案 1 :(得分:1)
这意味着您有一个未被捕获的无法处理的异常,它会使您的应用程序崩溃。
如果它在调试模式下工作,您需要查看发布版本的不同之处。所有的图书馆都在场吗?你有app.config设置吗?
在Windows日志下检查您的事件查看器 - >申请更多信息。
如果设置了异常处理程序,您将获得更好的信息,例如堆栈跟踪。
答案 2 :(得分:0)
您需要生成一个可在事后分析的故障转储。您需要对注册表进行一些更改,然后您可以使用Visual Studio分析转储文件。希望,这将为您提供更多线索,例如失败的特定功能。
有关详细信息,请访问此网站: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html
您将设置DebugDiag,这是Microsoft的一个工具。
让我知道事情的进展情况,或者你是否找到了更好的工具。
此致
戴夫
答案 3 :(得分:0)
.net(托管调试器助手)中有一个很好的功能,可以对本机和托管代码互操作进行故障排除MSDN article about using it here
可以在Visual Studio异常视图窗口中配置MDA抛出的异常。