诊断我的.Net托管应用程序崩溃正确

时间:2014-08-19 08:18:04

标签: c# .net clr

我已经到了我正在编写的项目正在进入狂野(woo)的程度,人们正在回来处理我想修复的应用程序崩溃事件。现在我不能说我的程序正在运行的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(我的申请名称,revoloutionary,我是一个工作的向导)

签名2(我的申请版本)

签名4(错误源自的库)

签名5(该图书馆版本)

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

所以基本上所有明显的东西我都可以解决。和所有十六进制值我不知道什么是什么。如果我们将此错误作为我们的测试用例,我该如何计算出我的代码的哪个部分导致了boo boo?

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

这是一个.net 4.0完整配置文件框架。在任何给我引用“mscorwks.dll”的教程中我改为写“clr.dll”仍然没有快乐。

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

0:005> !token2ee mscorlib 0600451e
c0000005 Exception in C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.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(两次,谢谢你)我得到了回复:

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似乎是内部thrower,它对一个名为“WriteNotSupported()”的函数有意义。有没有什么办法可以找到主机程序集(.exe)运行导致失败的方法签名(或者失败所在的创建函数,或者......与我的程序有关的任何内容)

1 个答案:

答案 0 :(得分:1)

在MSDN博客上查看此帖子:Windows Error Reporting and CLR integration