2009-12-16 66 views
0

我有一個相當簡單的C#程序(沒有用戶界面,只是命令行),使用第三方庫(Abbyy的Finereader 8.1)做一些工作,然後退出。程序退出C#內存錯誤

夠簡單,效果很好。然而最近,我們已經開始得到從程序出現以下錯誤:

應用程序錯誤: 「0x2c0de46b」指令引用內存 「0x0732aa84」。

有點挖掘表明這發生在C#代碼的末尾。基本上最後兩行是:

Console.WriteLine(message); 
    return statusCode; 

最終的控制檯消息被寫入並且程序的輸出很好。事實上,如果不是因爲這個錯誤導致程序完全終止,我可以解決它。

我們正在運行兩個腳本,每個腳本在兩臺機器上調用該程序。這是隨機發生的(據我所知),但通常至少有一個(4個腳本)每天都會發生這種情況。我認爲這可能是一些奇怪的事情發生在併發運行,但測試消除了這一點。

任何關於可能原因的想法都會受到歡迎,因爲我已經沒有想法。

此外,如果有人知道在發生這種情況時讓程序終止的方法,那將很有用。

+0

你的代碼中是否有定時器或線程運行?退出後會發生事件嗎? – 2009-12-16 15:38:10

+0

沒有定時器或線程。 – Kris 2009-12-16 15:52:58

回答

1

「應用程序錯誤:」0x2c0de46b「處的指令引用」0x0732aa84「處的內存。」

此錯誤意味着內存損壞在您的代碼的某個地方,沒有完整的代碼我不能說更多比這。 在這種情況下出現異常的地方並不重要。試着看看你的代碼,特別是調用庫的代碼。

+0

你有沒有檢查實際有缺陷的內存?我曾經花了數天的時間嘗試尋找一個原來是DIMM模塊的錯誤...... – Onots 2009-12-16 14:03:37

+0

這發生在兩臺不同的機器上,大概需要8個月的時間購買。硬件故障是不可能的。 – Kris 2009-12-16 14:46:14

+0

這似乎是發生了什麼事情,雖然我仍然無法找出根本原因。幸運的是,事實證明,可以強化調用程序,並重試該命令似乎工作。 – Kris 2010-02-26 12:44:27

1

呃......故障排除表明我問什麼改變了,但我想你自己也是這麼想的。你使用的是什麼版本的.NET框架?這個問題發生在什麼操作系統上?

我相信這個異常來自第三方庫所做的一些清理。你有沒有聯繫他們的支持?你能否嘗試顯式卸載庫並查看錯誤是否仍然存在?

或者......您是否嘗試添加未處理異常的處理程序?可能是值得一試...

public static void Main() 
{ 
    AppDomain.CurrentDomain.UnhandledException += 
     new UnhandledExceptionEventHandler( 
      OnUnhandledException); 

    //some code here.... 
} 

/// <summary> 
/// Occurs when you have an unhandled exception 
/// </summary> 
public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    //here's how you get the exception 
    Exception exception = (Exception)e.ExceptionObject; 

    //bail out in a tidy way and perform your logging 
} 

(由DoctaJonez示例代碼)

只是拋出一些東西在那裏,因爲似乎沒有成爲一個明確的答案(還)。