2010-03-18 52 views
5

我们有这个错误,只有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()真的不是问题......但是......我被卡住了。

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

+0

由于没有人在一小时后回答,我建议您尝试联系http://blogs.msdn.com/ntdebugging/上的某人。对于它的价值,我认为应该将一个指向过程的指针传递给runTryCode。出于某种原因,该指针被扰乱(覆盖?)并且包含000 ... 4。也许你可以找出应该调用的过程,然后从那里找出谁已经覆盖了该特定地址。 – 2010-03-18 14:54:22

+0

你总是得到这个确切的崩溃转储吗?调试访问违规的部分问题是,它们可能实际上是其他代码的副作用,它们*不会崩溃,而是决定在任何*做*崩溃的内存中乱写(通常由间歇性崩溃和不一致堆栈痕迹)。 – Aaronaught 2010-03-28 18:14:09

回答

0

谢谢大家!最后算出来了。

这里有一些本地互操作,GC显然是围绕着内存中的一些变量。这是Interop一方肆虐的一员。解决方法:使用IntPtr或GCHandle.Alloc()

(不可否认,这个答案写得有点急,当我有时间时会尝试填写正确答案)。

+0

moogs你已经写了匆忙的答案,你能否请你写一个正确的答案和描述你已经部署了你如何使用IntPtr和GCHandle.Alloc – dbw 2013-09-10 06:07:24

0

在黑暗中刺伤 - 但看到它可能与打印有关,是否可能是由恶劣的打印机驱动程序引起的?

问题发生在不同的机器上还是只发生在特定的机器上?

0

访问冲突必须来自本机代码,因此,那里的数据结构可能是错误的或者定义可能有些问题。你是否调用本地调用方法或将数据结构发送到其他调用本地调用的托管方法?

由于有线程提到这是代码运行多线程?有没有可能你有一个线程问题,你用来与本地代码交谈的数据结构正在被其他线程破坏?