我们有这个错误,只有30%的版本发布版本。 打开在WinDbg中崩溃转储(剪断输出“分析-v!”):.NET调试 - System.Threading.ExecutionContext.runTryCode
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
现在,IsStatusOK()只是调用PrintSystemJobInfo.Get(),但这似乎并不甚至会出现在堆栈中。
有关如何调试的任何想法?我确定runTryCode()真的不是问题......但是......我被卡住了。
谢谢! (我真的在这里摸索)。
由于没有人在一小时后回答,我建议您尝试联系http://blogs.msdn.com/ntdebugging/上的某人。对于它的价值,我认为应该将一个指向过程的指针传递给runTryCode。出于某种原因,该指针被扰乱(覆盖?)并且包含000 ... 4。也许你可以找出应该调用的过程,然后从那里找出谁已经覆盖了该特定地址。 – 2010-03-18 14:54:22
你总是得到这个确切的崩溃转储吗?调试访问违规的部分问题是,它们可能实际上是其他代码的副作用,它们*不会崩溃,而是决定在任何*做*崩溃的内存中乱写(通常由间歇性崩溃和不一致堆栈痕迹)。 – Aaronaught 2010-03-28 18:14:09