.NET调试 - System.Threading.ExecutionContext.runTryCode

moo*_*ogs 5 .net debugging exception

我们有这个错误,只有30%的时间用于Release版本.在WinDbg中打开崩溃转储(剪切"!analyze -v"输出):

FAULTING_IP: 
+4
00000000`00000004 ??              ???

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000000000004
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000008
   Parameter[1]: 0000000000000004
Attempt to execute non-executable address 0000000000000004
ERROR_CODE: (NTSTATUS) 0xc0000005 - 
   The instruction at 0x%08lx referenced memory at 0x%08lx. 
   The memory could not be %s.
WRITE_ADDRESS:  0000000000000004 
MANAGED_STACK: 
(TransitionMU)
0000000024B9E370 000007FEEDA1DD38 
   mscorlib_ni!
   System.Threading.ExecutionContext.runTryCode(System.Object)+0x178
(TransitionUM)
(TransitionMU)
0000000024B9DFB0 000007FF00439010 MyLibrary!DocInfo.IsStatusOK()+0x30
Run Code Online (Sandbox Code Playgroud)

现在,IsStatusOK()只调用PrintSystemJobInfo.Get(),但这似乎甚至没有出现在堆栈中.

关于如何调试这个的任何想法?我确定runTryCode()确实不是问题...但是......我被卡住了.

谢谢!(我真的在这里摸索).

moo*_*ogs 0

感谢大家!终于想通了。

这里正在进行一些本机互操作,并且 GC 显然正在内存中的一些变量周围移动。这就是对 Interop 方面造成严重破坏的问题。解决方案:使用IntPtr或GCHandle.Alloc()

(诚​​然,这个答案写得有点仓促,有时间会尝试填写正确的答案)。