我正在爲學生正在實施遞歸排序算法的作業寫一個評分程序。這意味着幾名學生可能會導致破壞的代碼,導致堆棧溢出。我想以某種方式捕獲調用學生代碼時發生的堆棧溢出,以便我可以從他們的分數中扣除並繼續進行其他測試。不幸的是,堆棧溢出似乎沒有經過其他異常的標準路徑 - try/catch塊似乎沒有幫助。發生堆棧溢出後,是否有辦法將執行返回到我的代碼?我研究過使用線程來做到這一點,但它似乎回到了不能使用try/catch。如何從Java中的堆棧溢出中捕獲和恢復?
9
A
回答
14
在調用學生的方法時,應該將調用嵌入到try-catch塊中,並將Exception
s作爲Throwables
。
請看下面的代碼:
public class Test { /** * @param args */ public static void main(String[] args) { try { soe(); } catch (Throwable e) { System.out.println("Caught:" + e + ", everything went better than expected."); } } /** * Method producing StackOverflowError */ public static void soe() { soe(); } }
更多信息
醒目當Throwable
是你會趕上:
- 普通
Exception
秒 - 這強制你使用try-catch
或throws
(例如,IOException
) RuntimeException
s - 通過方法(例如,NullPointerException
)Error
s - 例如,StackOverflowError
見Throwable
對象
2
您可以使用新的Process
來關閉程序,然後重定向其錯誤流以檢查堆棧溢出。
+0
沒有必要 - 請參閱下面的Matyas的答案。 – 2012-02-16 17:38:03
1
在official Java Docs你可以嘗試在一個單獨的JVM中運行的每個程序。
相關問題
- 1. 如何用pthread捕獲堆棧溢出?
- 2. 如何捕獲堆棧溢出錯誤
- 3. Java中的堆棧溢出與Collections-Java中的堆棧實現
- 4. 在Haskell程序中從堆棧溢出或堆耗盡中恢復
- 5. 堆棧溢出的Java
- 6. 堆棧溢出堆棧溢出
- 7. freertos中的堆棧溢出
- 8. Jboss中的堆棧溢出
- 9. Prolog中的堆棧溢出
- 10. MemoryError:python中的堆棧溢出
- 11. 堆棧溢出中的SAML?
- 12. java堆棧溢出錯誤?
- 13. 堆棧溢出錯誤(Java)
- 14. 如何在gcc中恢復堆棧幀?
- 15. 如何在C++和Unix中獲得堆棧溢出?
- 16. 堆棧溢出
- 17. 在遞歸C++函數中捕獲「堆棧溢出」異常
- 18. savedInstanceState從堆棧中恢復片段
- 19. 堆棧溢出從railstutorial.org
- 20. 無法從堆棧溢出
- 21. 捕捉堆棧溢出異常C#
- 22. STArray和堆棧溢出
- 23. Java堆棧溢出錯誤 - 如何在Eclipse中增加堆棧大小?
- 24. 如何解決java中的無限遞歸(堆棧溢出)?
- 25. PowerShell中捕獲調用堆棧拋出
- 26. 從堆分配時堆棧溢出
- 27. 堆棧溢出C++
- 28. C#堆棧溢出
- 29. Malloc堆棧溢出
- 30. 堆棧溢出C++
這個。錯誤和異常都是Throwable的子類,這就是錯誤通過正常的Exception-catch的原因。它被設計成如此嚴重的失敗(這是Java中的錯誤)不會被程序員輕易繞過。 – 2012-02-16 17:44:30
@IbrahimArief:感謝您指點基礎知識。這有助於 – Jayy 2012-02-16 17:50:11
非常好,謝謝! – Solaraeus 2012-02-16 18:03:14