Sto scrivendo un programma di valutazione per un compito in cui gli studenti stanno implementando algoritmi di ordinamento ricorsivo. Ciò significa che diversi studenti probabilmente trasformeranno il codice in errore, il che causerà un eccesso di stack. Mi piacerebbe in qualche modo catturare gli overflow di stack che si verificano quando si chiama il codice studenti in modo da poter detrarre dal loro punteggio e continuare su altri test. Sfortunatamente, lo stack overflow non sembra passare attraverso il percorso standard di altre eccezioni: i blocchi try/catch non sembrano aiutare. C'è un modo per restituire l'esecuzione al mio codice dopo che si è verificato un overflow dello stack? Ho cercato di utilizzare i thread per farlo, ma sembra tornare a non essere in grado di usare try/catch.Come posso rilevare e recuperare da un overflow di stack in Java?
9
A
risposta
14
Quando si chiamano i metodi degli studenti, è necessario incorporare le chiamate nei blocchi try-catch e catturare Exception
s come Throwables
.
vedere il codice seguente:
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(); } }
Maggiori informazioni
Quando cattura Throwable
s si cattura:
- normali
Exception
s - che far rispettare l'usotry-catch
othrows
(ad esempioIOException
) RuntimeException
s - che esplodono attraverso i metodi (ad es.NullPointerException
)Error
s - ad es.StackOverflowError
Vedi l'official Java Docs sul Throwable
oggetto
2
È possibile attivare i programmi utilizzando un nuovo Process
e quindi reindirizzare il flusso di errori per verificare l'overflow dello stack.
+0
Non ce n'è bisogno - vedi la risposta di Matyas sotto. –
1
Si potrebbe provare a eseguire ogni programma in una JVM separata.
Problemi correlati
- 1. try/catch on stack overflow in java?
- 2. Errore di "stack overflow"
- 3. Java Pattern causa overflow dello stack
- 4. AppDomain.FirstChanceException e eccezione di overflow dello stack
- 5. Come intercettare lo stack overflow con pthread?
- 6. Debug Stack errore di overflow in IE8
- 7. C++ overflow dello stack
- 8. Errore di overflow dello stack nella ricorsione Java
- 9. Come mostrare un messaggio popup come in Stack Overflow
- 10. stack eccezione di overflow in C# setter
- 11. Haskell - overflow stack C
- 12. Come implementare la ricerca come Stack Overflow
- 13. Come posso recuperare da EXC_BAD_ACCESS?
- 14. Domande su pieghe e overflow dello stack
- 15. Come combinare WMD e prettify, come Stack Overflow?
- 16. Come ottenere URL puliti come Stack Overflow?
- 17. Come rilevare un overflow di stringa da una linea in C#?
- 18. L'overloading dell'operatore provoca un overflow dello stack
- 19. Stack Overflow Tag domanda Textbox
- 20. merge sort da "Programmare in Scala" provoca overflow dello stack
- 21. Come creare l'impaginazione come Stack Overflow site
- 22. Come evitare di cambiare la dimensione dello stack E evitare di ottenere un overflow dello stack in C#
- 23. Stack Overflow Algoritmo domande correlate
- 24. Debug di un overflow dello stack in Rust
- 25. Puoi dare un esempio di overflow dello stack in C++?
- 26. Tag hovering come Stack Overflow utilizzando jQuery
- 27. Eccezione di overflow dello stack: perché?
- 28. Stack overflow alla riga 0
- 29. Quale soluzione OpenID è realmente utilizzata da Stack Overflow?
- 30. Overflow dello stack in codice molto semplice
Questo. Gli errori e le eccezioni sono entrambe sottoclassi di Throwable, che è il motivo per cui gli errori passano attraverso le normali eccezioni. È progettato in questo modo in modo che i guasti critici (che è quello che gli errori sono in Java) non siano facilmente aggirabili dai programmatori. –
@IbrahimArief: Grazie per aver puntato alle basi. Questo aiuta – Jayy
Eccellente, grazie! – Solaraeus