我试图找到令人讨厌的AccessViolation的原因。此访问冲突始终使用相同的堆栈跟踪。
(c18.b2c):访问冲突 - 代码c0000005(!!!第二次机会!!!) ***错误:找不到符号文件。默认导出C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll的符号 - !CLR StrongNameSignatureVerification + 0x797c: 000007fe
f70eaa4c 48894110 mov qword ptr [rcx+10h],rax ds:00000000
00000010 = ????????????????
在“AwareLock :: OwnedByCurrentThread”中的某处抛出访问冲突 加载正确的符号后,我得到了这个堆栈跟踪:
clr!ObjHeader :: Wait + 0x24,调用clr!AwareLock :: OwnedByCurrentThread clr!ObjectNative :: WaitTimeout + 0xc7,调用clr!ObjHeader :: Wait System.Threading.Monitor.Wait(System.Object,System.TimeSpan)),调用000007fef70ea670(存根为System.Threading.Monitor.ObjWait(Boolean,Int32,System.Object)) 0000000034cae6a8 000007fef70ea6eb clr!ObjectNative :: WaitTimeout + 0x7b,调用clr!LazyMachStateCaptureState 0000000034cae6f0 000007fef5712f7f(MethodDesc 000007fef4b28d08 + 0x4f System.Threading.Monitor.Wait(System.Object,System.TimeSpan)),调用000007fef70ea670(存根为System.Threading.Monitor.ObjWait(Boolean,Int32,System.Object)) 0000000034cae740 000007fe986debe1(MethodDesc 000007fe98789088 + 0xc1 PeripheralHardwareAccess.PeripheralHardwareAccessBase.WaitForAck(PeripheralHardwareAccess.AsciiControlProtocolMessage,System.TimeSpan)),调用(MethodDesc 000007fef4b28d08 +0 System.Threading.Monitor.Wait(System.Object,System.TimeSpan))
因为我们使用本机代码,所以锁定对象的对象标头可能已损坏。我已经使用提到here的“gflags.exe”启用了堆检查,但没有成功。
我运行SOS的“!VerifyHeap”命令,没有任何检测到的错误。如果始终是同一个无效的对象。有没有办法在运行时进行检查? 您是否有其他想法究竟是什么腐败以及如何检测此异常的原因?或者哪些命令/数据可能有助于调查此错误。
谢谢
曼努埃尔
答案 0 :(得分:3)
我不确定它是否是同一个问题。我只记得它是000005 Access Vialotion异常。但是到目前为止还没有人回答,以下内容可能有所帮助。我们在使用.NET 4.0的AutoCAD中遇到了类似的问题。安装.NET 4.5后,我们在一段时间后遇到了访问冲突异常。但是当它发生一次时它总是出现。 卸载4.5并安装4.0解决了它。背后的原因是在AutoCAD代码中触发的Managed C ++ v16编译器中的错误。
https://connect.microsoft.com/VisualStudio/feedback/details/801715/clr-runtime-error-kb2640103
希望这有帮助
答案 1 :(得分:0)
感谢KCT的回答。您可以通过此热修复解决类似问题。 (+1)为你的答案。但我们已经安装了最新版本的框架,其中已包含此热修复程序。在我的情况下,确实是某些本机代码中的一个错误导致了这个问题。