2012-06-20 41 views
38

Recibo dicho problema en el depurador y el programa se detiene la ejecución. El depurador no me muestra la línea, así que no sé qué arreglar.cómo solucionar "'System.AggregateException' se produjo en mscorlib.dll"

Una excepción no controlada del tipo 'System.AggregateException' producido en mscorlib.dll

Información adicional: excepción (s) de una tarea que no se observaron ya sea por espera en el Grupo o acceder a su propiedad Excepción . Como resultado de , la excepción no observada se volvió a lanzar por el hilo del finalizador.

No se puede obtener el valor de local o de argumento '', ya que no está disponible en este puntero de instrucción , posiblemente porque ha sido optimizado. System.Threading.Tasks.TaskExceptionHolder

¿Cómo solucionar mi problema?

También encontré esta pregunta, que es bastante similar Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away

+0

De alguna manera causé este problema cuando se interrumpió una aplicación de consola sin problemas durante una ejecución de depuración. Cerrar Visual Studio y volver a abrirlo resolvió el problema y luego se ejecutó correctamente; esto no ayudará en todos los casos, pero vale la pena intentarlo si la aplicación "debería" funcionar bien. –

Respuesta

42

Como dice el mensaje, tiene una tarea que inició una excepción no controlada.

Active la interrupción de todas las excepciones (depuración, excepciones) y vuelva a ejecutar el programa.
Esto le mostrará la excepción original cuando fue lanzado en primer lugar.


(comentario añadido): En VS2015 (o superior). Seleccione Depurar> Opciones> Depuración> General y desmarque la opción "Habilitar simplemente mi código".

+2

¿Dónde está esta configuración? Depurar> Excepciones> ...? – mdupls

+3

@mdupls: rompa todas las excepciones de CLR. – SLaks

+1

simplemente compruétalos todos. Luego use "Restablecer todo" para volver a los valores predeterminados. –

9

Puede manejar la excepción directamente para que no bloquee su programa (capturando el AggregateException). También podría mirar a la excepción interna, esto le dará una explicación más detallada de lo que salió mal:

try { 
    // your code 
} catch (AggregateException e) { 

} 
+2

Pero, ¿cómo resolver el problema definitivamente? –

+0

En general, le gustaría que la aplicación falle si algo sale mal. Aborde la fuente del problema en lugar de detectar todas las excepciones. –

4

La respuesta aceptada funcionará si se puede reproducir fácilmente el problema. Sin embargo, como una cuestión de mejores prácticas, debería detectar cualquier excepción (y registro) que se ejecuten dentro de una tarea. De lo contrario, su aplicación se bloqueará si ocurre algo inesperado dentro de la tarea.

Task.Factory.StartNew(x=> 
    throw new Exception("I didn't account for this"); 
) 

Sin embargo, si hacemos esto, al menos, la aplicación no se cae.

Task.Factory.StartNew(x=> 
    try { 
     throw new Exception("I didn't account for this"); 
    } 
    catch(Exception ex) { 
     //Log ex 
    } 
) 
0

En mi caso funcionó en este problema al utilizar Edge.js - todo el problema fue un error de sintaxis JavaScript dentro de una definición de función C# Edge.js.

Cuestiones relacionadas