正确诊断.net托管应用程序崩溃
本文关键字:应用程序 崩溃 net 诊断 | 更新日期: 2023-09-27 18:18:32
我已经到了这样的地步:我一直在写的项目正在走向疯狂(哇),人们回来时带来了我想要修复的应用程序崩溃事件。现在我不能保证我的程序运行的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:'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(两次,谢谢你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集成