APPCRASH 消息的详细信息是啥意思?
Posted
技术标签:
【中文标题】APPCRASH 消息的详细信息是啥意思?【英文标题】:What do the details of an APPCRASH message mean?APPCRASH 消息的详细信息是什么意思? 【发布时间】:2012-10-07 00:58:29 【问题描述】:我的 C# 应用程序出现 APPCRASH。运行时给出“此应用程序已请求运行时以异常方式终止它”的错误消息。然后,当我单击确定时,我会收到一条“MyApplication 已停止工作”消息,其中包含通常的“在线检查解决方案”、“关闭程序”和“调试程序”选项。当我单击“其他详细信息”时,我得到了 APPCRASH 签名,其中包含许多其他信息。其中一些是人类可读的,其中一些只是十六进制数字。 “异常代码”是 40000015。还有几行“附加信息”。我的问题是:宇宙中是否有人知道 APPCRASH 消息中的信息是什么意思?
似乎这条消息是为了让能从中推断出原因的人阅读。在搜索答案时,我发现很多人发布格式完全相同的消息。不幸的是,我没有找到有关此信息含义的任何解释。
另外,我尝试了“调试程序”选项,但它没有帮助。它只是把我放在系统 dll 中,而我的代码在调用堆栈中的任何地方都没有。我调查了一下,这个系统代码没有出现这个错误。
APPCRASH 消息将另一个 dll 命名为“故障模块”(此代码使用了很多外部 dll),并且可能发生致命错误。但是这些信息并不是很有帮助,因为我需要在我的代码中找到对外部 dll 进行错误调用(或将其置于错误状态)的位置。可悲的是,当我说“我的代码”时,我只是指我正在使用的代码。这是一个巨大的代码库,由几十个人在几年内编写,所以我不能只猜测可能导致致命错误的地方。这就是为什么我希望从 APPCRASH 消息中获得更多信息。这也是我对细节非常吝啬的原因。整个事情都是非常专有的,有很多繁文缛节。这也是我没有发布APPRCASH消息内容的原因。
明确地说,我并不是要你为我调试我的问题。我无法给你一个可重现的错误案例,我也没有要求任何人告诉我在我的具体案例中错误的原因。我只是想知道如何解释这些十六进制数字,但我找不到任何文档。
【问题讨论】:
它是本地 C 或 C++ 代码调用 abort() 函数时使用的异常代码。我们无法帮助您找到它,但很明显它位于您丢失的“系统 dll”中。 调试器放入我的系统代码中没有出现异常;但很可能在不同的外部 dll 中发生了异常。如果这是来自 abort() 调用,那么它会在非托管土地的某个地方死亡。 听起来您在使用非托管代码时遇到了问题。为了隔离问题,我会尝试检查您的代码中的 [DllImport] 并尝试模拟,对此进行评论,看看您是否有更少的问题。另一个想法是,如果您有可能有错误的非托管调用的 3rd 方组件。最后,尝试 WinDBG 并查找问题。 WinDBG 将是我最后的资源,因为我不是专家,而且它是一种非常核心的调试方式。 【参考方案1】:以下是应用程序崩溃消息的示例:
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 哈希值......它基本上就在那里,因此可以通过哈希码快速比较大量信息是否相同/不同,这样您就可以知道错误是否是由于与另一个相同的执行状态造成的.
【讨论】:
【参考方案2】:这意味着您有一个未捕获的未处理异常,它正在使您的应用程序崩溃。
如果它在调试模式下工作,您需要查看发布版本的不同之处。所有的图书馆都在吗?你有你的 app.config 设置吗?
在 Windows 日志 -> 应用程序下检查您的事件查看器以获取更多信息。
如果您设置异常处理程序,您将获得更好的信息,例如堆栈跟踪。
【讨论】:
您好,感谢您的回复。不幸的是,我已经尝试了所有常用的技巧,但我还没有走得很远。当前在调试模式下运行,它会中断。我将调试器设置为中断未处理的异常,但它没有捕获任何异常。事件查看器中的信息并不比 appcrash 消息更详细。 @dmck - 有一些糟糕的异常(如 ***Exception 或 OutOfMemory 异常)会破坏 AppDomain 状态,这些异常在真实发生时无法记录/缓存【参考方案3】:您需要生成一个可以在事后分析的故障转储。您需要对注册表进行一些更改,然后您可以使用 Visual Studio 分析转储文件。希望这将为您提供更多线索,例如失败的特定功能。
详情请见本网站: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html
您将设置来自 Microsoft 的工具 DebugDiag。
如果您找到更好的工具,请告诉我。
问候,
戴夫
【讨论】:
【参考方案4】:.net 中有一个很好的功能,托管调试器助手,可以解决本机和托管代码互操作问题MSDN article about using it here
可以在 Visual Studio 异常视图窗口中配置 MDA 引发的异常。
【讨论】:
以上是关于APPCRASH 消息的详细信息是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
请问:微信公众平台的接口配置信息中的“token”是啥意思?应该怎样设置?我不懂编程请说的详细些,谢~