【发布时间】: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 将是我最后的资源,因为我不是专家,而且它是一种非常核心的调试方式。
标签: c# event-log crash-reports crash windows-error-reporting