Estoy escribiendo un programa de calificación para una tarea en la cual los estudiantes están implementando algoritmos de ordenamiento recursivo. Esto significa que varios estudiantes probablemente entreguen código dañado que causa el desbordamiento de la pila. Me gustaría de alguna manera atrapar los desbordamientos de pila que se producen al llamar al código de los estudiantes para que pueda deducir de su puntaje y continuar a otras pruebas. Desafortunadamente, el desbordamiento de pila no parece pasar por la ruta estándar de otras excepciones: los bloques try/catch no parecen ayudar. ¿Hay alguna manera de devolver la ejecución a mi código después de que se haya producido un desbordamiento de la pila? He analizado el uso de subprocesos para hacer esto, pero parece volver a no poder usar try/catch.¿Cómo atrapo y me recupero de un desbordamiento de pila en Java?
9
A
Respuesta
14
Al llamar a los métodos de sus alumnos, debe incrustar las llamadas en bloques try-catch y capturar Exception
s como Throwables
.
Véase el siguiente código:
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(); } }
Más información
Cuando la captura de Throwable
s que se captura:
- normales
Exception
s - que imponen su usotry-catch
othrows
(por ejemplo,IOException
) RuntimeException
s - que burbujean a través de métodos (ej.NullPointerException
)Error
s - por ejemplo.StackOverflowError
Véase el official Java Docs en el Throwable
objeto
2
Puede disparar sus programas utilizando un nuevo Process
y luego redirigir su flujo de error para comprobar el desbordamiento de la pila.
+0
No hay necesidad de eso; consulte la respuesta de Matyas a continuación. –
1
Se podría intentar ejecutar cada programa en una JVM por separado.
Cuestiones relacionadas
- 1. Mi regex está causando un desbordamiento de pila en Java; ¿Qué me estoy perdiendo?
- 2. El patrón Java causa desbordamiento de pila
- 3. Extraño desbordamiento de pila?
- 4. Desbordamiento de pila
- 5. AppDomain.FirstChanceException y excepción de desbordamiento de pila
- 6. C++ desbordamiento de pila
- 7. Ejecutando un error de "desbordamiento de pila"
- 8. Explotación de desbordamiento de pila en C
- 9. Cómo controlar o evitar un desbordamiento de pila en C++
- 10. ¿Integra el desbordamiento de pila en IDEs?
- 11. ¿Qué es un desbordamiento de pila?
- 12. Pila excepción de desbordamiento en C# colocador
- 13. desbordamiento de pila misterioso en el constructor
- 14. Desbordamiento de pila en la línea 0
- 15. Establezca el tamaño de la pila con setrlimit() y provoque un desbordamiento de la pila/segfault
- 16. Error de desbordamiento de la pila de Java: ¿cómo aumentar el tamaño de la pila en Eclipse?
- 17. ¿Puedes dar un ejemplo de desbordamiento de pila en C++?
- 18. Anulación de desbordamiento de pila, redis y caché
- 19. Formato de desbordamiento de pila para Wordpress
- 20. Reducción de un flujo grande sin desbordamiento de pila
- 21. Arquitectura web de desbordamiento de pila
- 22. ¿Cómo prevenir un desbordamiento de pila al monitorear el tamaño de la pila?
- 23. ¿Cómo evitar el desbordamiento de pila en Haskell?
- 24. Python BaseHTTPServer, ¿cómo atrapo/atrapo errores de "tubería rota"?
- 25. Excepción de desbordamiento de pila: ¿por qué?
- 26. Excepción sin seguimiento de pila en Java
- 27. Función recursiva que causa un desbordamiento de la pila
- 28. Java: ¿cómo atrapo InterruptedException en un hilo, cuando es interrumpido por otro hilo?
- 29. ¿Cómo puedo prevenir o recuperar un desbordamiento de pila en un subproceso de trabajador?
- 30. Agregar un botón personalizado al editor WMD (Desbordamiento de pila)
Esto. Los errores y las excepciones son ambas subclases de Throwable, por lo que los errores pasan por la captura de excepciones normal. Está diseñado de esa manera, por lo que los programadores no evitarán fácilmente las fallas críticas (que es lo que los errores son en Java). –
@IbrahimArief: gracias por señalar lo básico. Esto ayuda a – Jayy
Excelente, gracias! – Solaraeus