正确诊断.net托管应用程序崩溃



我已经到了这样的地步:我一直在写的项目正在走向疯狂(哇),人们回来时带来了我想要修复的应用程序崩溃事件。现在我不能保证我的程序运行的pc上有任何类型的开发或诊断工具,所以我的问题是:

从问题事件和它所有的问题签名中,我确信我可以找到调用方法,或者是什么导致这个错误发生,因为签名看起来像引用了一个方法或类似的。

我收到的日志示例如下:

Problem signature:
  Problem Event Name:    CLR20r3
  Problem Signature 01:    SarkAgent.exe
  Problem Signature 02:    0.0.0.0
  Problem Signature 03:    509a4197
  Problem Signature 04:    mscorlib
  Problem Signature 05:    4.0.30319.34014
  Problem Signature 06:    52e0b679
  Problem Signature 07:    451e
  Problem Signature 08:    13c
  Problem Signature 09:    System.UnauthorizedAccess
  OS Version:    6.3.9600.2.0.0.256.48
  Locale ID:    2057
  Additional Information 1:    5861
  Additional Information 2:    5861822e1919d7c014bbb064c64908b2
  Additional Information 3:    d1d9
  Additional Information 4:    d1d94a13d3609d6b740644c12508f581

现在我知道的一些事情是:

签名1(我的应用程序名称,革命性的,我是一个解决这个问题的向导)

签名2(我的应用版本)

签名4(错误源自的库)

签名5(该库的版本)

签名9(抛出的托管错误)

基本上所有显而易见的东西我都能算出来。和所有的十六进制值我不知道什么关系什么。如果我们把这个错误作为我们的测试用例,我如何找出代码的哪一部分导致了错误?

任何来自msdn或其他关于每个问题签名实际与之相关的工具也将非常有用。(:

这是一个。net 4.0的完整配置文件框架。在任何给我提供"mscorwks.dll"参考的教程中,我都将其写成"clr.dll"。

编辑:我已经进一步发展到windbg现在在程序执行后正确加载sos的地步。当运行

时:
0:005> !token2ee mscorlib 0600451e
c0000005 Exception in C:WindowsMicrosoft.NETFramework64v4.0.30319sos.token2ee debugger extension.
  PC: 00007ffa`c7a50c05  VA: 00000000`00000000  R/W: 0  Parameter: 00000000`00000000

编辑2:我已经取得了进一步的进展,windbg现在向我展示了集合内的令牌关系。问题是IL不存在…混乱随之而来。为了使其工作,我启动应用程序,确保使用

下载最新的.pdb。
!sym -noisy
.symfix
.reload -f

然后我运行我的.loadby sos clr,现在正确加载模块"sos"。当运行!token2ee mscorlib.dll 0600451e(两次,谢谢你dono)我得到这个返回:

Module:      00007ffac32e1000
Assembly:    mscorlib.dll
Token:       000000000600451e
MethodDesc:  00007ffac34e1f40
Name:        System.IO.__Error.WriteNotSupported()
JITTED Code Address: 00007ffac3fb8150

运行dumpil 00007ffac34e1f40逻辑指示我应该找到IL_013c,但我没有,我得到:

ilAddr = 00007ffac3a545f7
IL_0000: ldstr "NotSupported_UnwritableStream"
IL_0005: call System.Environment::GetResourceString
IL_000a: newobj System.NotSupportedException::.ctor
IL_000f: throw 

这也给我带来了一点,现在我正在调试"失败的模块",这是一个windows打包库。而返回的IL似乎是内部抛出者,这在称为"WriteNotSupported()"的函数上是有意义的。是否有任何方法可以找到主机程序集(.exe)运行以导致失败的方法签名(或失败驻留的创建函数,或…任何与我的程序有关的内容

看看MSDN博客上的这篇文章:Windows错误报告和CLR集成

最新更新