我遇到了一个C#应用程序的问题,它可能会在随机时间内崩溃而不会发出警告或有意义的信息。可以通过应用程序输入相同的数据,但它不会同时崩溃,有时甚至不会崩溃。
我使用WinDbg获取有关异常的一些信息。 NullReferenceException
会出现Access Violation
错误。
使用SOSEX,我使用!mk
获得了一个堆栈。我有一个堆栈,顶部有以下内容:
03:M 000000001aefd4f8 000007fef94cfa70 System.Runtime.Remoting.SoapServices.GetXmlTypeForInteropType(System.Type, System.String ByRef, System.String ByRef)(+0x0 IL,+0xd9e9a0 Native)
04:M 000000001aefd4f8 000007fef94cfa6f System.Runtime.Remoting.Metadata.RemotingTypeCachedData.get_QualifiedTypeName()(+0x0 IL,+0xd9ea5f Native)
05:U 000000001aefd500 000007fef991339b clr!CopyValueClassUnchecked+0xb8
06:U 000000001aefd550 000007fef9902491 clr!JIT_BoxFastMPIGT__PatchTLSLabel+0x51
[WARNING: Multiple managed methods at this address]07:M 000000001aefd580 000007fef87350ad System.Collections.Generic.List`1[[System.__Canon, mscorlib]].System.Collections.Generic.IEnumerable<T>.GetEnumerator()(+0x0 IL,+0xff47bced Native)
[WARNING: Multiple managed methods at this address]08:M 000000001aefd5d0 000007fef6d60e4f System.Linq.Enumerable.FirstOrDefault[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1<System.__Canon>, System.Func`2<System.__Canon,Boolean>)(+0x22 IL,+0x5f Native)
09:M 000000001aefd630 000007fe9a7885d8 Settings.VersionedSettings.GetSetting(System.DateTimeOffset, System.Guid)(+0x4e IL,+0x258 Native)
以[WARNING: Multiple managed methods at this address]
开头的行似乎特别令人担忧 - 这是什么意思?
从底部向上看,直到这一点,这一切都看起来很好。然后对IEnumerable.FirstOrDefault
的随机方法调用将其抛弃。 VersionedSettings.GetSetting(...)
方法不会进行此类调用。这就是为什么我有点困惑。
编辑:我在WinDbg中运行!verifyheap
,输出结果为“未检测到堆损坏”。我对WinDbg的了解有限,所以我不确定这个命令的准确程度,但我认为值得添加。
有人知道发生了什么吗?