2010-03-18 72 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

訪問衝突必須來自本機代碼,因此,那裏的數據結構可能是錯誤的或者定義可能有些問題。你是否調用本地調用方法或將數據結構發送到其他調用本地調用的託管方法?

由於有線程提到這是代碼運行多線程?有沒有可能你有一個線程問題,你用來與本地代碼交談的數據結構正在被其他線程破壞?