¿Cómo atrapo un StackOverflowException
?Captura de StackOverflowException
Tengo un programa que permite al usuario escribir scripts, y cuando ejecuto código de usuario arbitrario puedo obtener un StackOverflowException
. La pieza que ejecuta el código de usuario está obviamente rodeada por un try
- catch
, pero los desbordamientos de pila no son detectables bajo circunstancias normales.
He mirado alrededor y this es la respuesta más informativa que pude encontrar, pero aún así me llevó a un callejón sin salida; desde un article in the BCL team's blog encontré que debería usar RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup
para llamar al código y al delegado al que se llamaría incluso después de un desbordamiento de pila, pero al intentarlo, el proceso termina con el mensaje de desbordamiento de pila sin que se llame nunca al delegado. Intenté agregar PrePrepareMethodAttribute
en el método del controlador, pero eso no cambió nada.
También intenté usar un dominio de aplicación y manejar el evento UnhandledException
y el evento DomainUnload
, pero todo el proceso se mata en desbordamientos de pila. Lo mismo sucede incluso si yo throw new StackOverflowException();
manualmente y no obtengo un desbordamiento de pila real.
¿Tiene un programa que puede usar scripts para automatizar algún proceso arbitrario, o su programa es un editor de texto para scripts? ¿Es su "código de usuario arbitrario" en sí mismo una secuencia de comandos o algún tipo de complemento IL? –
Ahora mismo mi programa es REPL (loop read-eval-print) para el idioma. – configurator