可能重複:
How do I prevent and/or handle a StackOverflowException? (C#)
C# catch a stack overflow exception捕捉堆棧溢出異常C#
我有(使用.NET 2.0)C#編寫的一個相當複雜的應用程序。該程序以大量遞歸的方式處理大量文件,並且在某些客戶端中它會遇到堆棧溢出異常。該計劃非常複雜,我們甚至無法重現問題 - 即使是在我們的客戶發生的地方。
顯而易見的解決方案是修復導致堆棧溢出但看起來不太可能的代碼 - 我們的代碼庫超過200萬行代碼,在內存中創建大型遞歸數據結構。我們不太可能偶然發現問題部分。 (無論如何,不是在短期內。)
但是,我們的程序還備份文件並對正在處理的文件進行更改,如果出現異常,它會將所有內容恢復到原始狀態。當堆棧溢出異常發生時,進程只是終止,並且此恢復功能沒有機會運行,因爲無法捕獲堆棧溢出。
所以我的問題是:有沒有辦法在.NET 2.0中捕捉堆棧溢出異常。我無法託管CLR,並且異常是真正的堆棧溢出,而不是由我們的代碼拋出。能夠做到這一點至少會讓我有能力恢復程序終止前所做的更改。
編輯:請注意,我很清楚堆棧溢出異常是什麼,它有多嚴重。我不是在尋找建議 - 這種情況很少發生。我想要做的是在磁盤空間有限的環境中恢復客戶端數據當它發生。如果我的程序在恢復操作後死亡,那我就沒問題。
你可以發佈一個當前正在使用的代碼示例嗎?或許你只是遇到了一個簡單的邏輯錯誤或內存泄漏問題 – MethodMan
一旦你發現了一個SO異常,你打算做什麼?你將如何從它恢復? –
@DJKRAZEno,沒有特定的代碼。我們正在討論一個包含250多個組件的大型應用程序。我不想找到堆棧溢出 - 我正在尋找一種方法來捕獲它並對其做出反應。 – xxbbcc