Pregunta

Por favor, hágamelo saber qué pasos tengo que seguir cuando mis aplicación se bloquea y se cierra el cuadro de diálogo que muestra que contiene "No enviar" y "Enviar informe de errores" botones.

¿Qué puedo yo hacer otra cosa que mirar el visor de sucesos para resolver esto?

Gracias

¿Fue útil?

Solución

  1. Se podría añadir un try/catch/finally construcción del cuerpo de tu método de introducción de Main().

  2. Para Windows Forms, puede agregar un controlador ThreadException, justo antes de Application.Run (), para atrapar las excepciones producidas en los controladores de eventos de interfaz de usuario de Windows Forms:

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. El resto de las excepciones no controladas pueden ser capturados usando:

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    Sin embargo, vale la pena mencionar que esto sólo le permite iniciar sesión / Informe excepción -. No se puede evitar que la aplicación se cierre una vez que salga este controlador final

  4. Visual Studio también se puede configurar para romper en la primera oportunidad excepciones y depuradores externos (como WinDbg con SoS administrados extensiones) se pueden capturar las excepciones de primera oportunidad también ( http: //www.codeproject. com / KB / debug / windbg_part1.aspx ).

Además, use un marco de registro como log4net añadir registro útil para su aplicación y volcado de información de excepción antes que se cierre la aplicación.

Otros consejos

Pregunte a sus usuarios si se puede reproducir el error y cómo. Si puede reproducir el error, ejecute en depuración en Visual Studio y siga los pasos para causar el accidente. Visual Studio entrará en el modo de depuración donde se captura el error. Allí se forme usted será capaz de seguir el rastro de apilado y ver lo que el código está causando el error. Visual Studio hace bastante fácil la depuración de la mayor parte del tiempo.

Lo ideal es utilizar una biblioteca de registro como Nlog o log4net para registrar las excepciones no controladas, y excepciones, en general, ingresando en su código cuando se producen.

También puede ayudar a tener diferentes niveles de registro en su aplicación para ayudar a localizar a un problema cuando no se está ejecutando en el equipo de desarrollo. Con Nlog puede dejar el registro en el código de producción y activar / desactivar la salida de registro a través del uso de un archivo de registro de configuración.

No he utilizado log4net así que no sé si tiene una característica similar.

El "Enviar / No enviar" errores tienden a ocurrir cuando se tiene una excepción no controlada en un subproceso en segundo plano (el hilo principal mostrará que siguen / salir de diálogo .NET con un seguimiento de pila).

Agregue un controlador de excepción a la función de su hilo y conectarse desde allí:

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

Esto es muy simplificado, y puede no ser la forma en que desea controlar una excepción. Pero espero que esto le conseguirá que se mueve en la dirección correcta.

Uso WinDBG para depurar el problema. Usted puede hacer que se rompa (como en la parada en un punto de interrupción) cuando se produce una excepción, y luego examinar la StackTrace ... objetos en el perímetro etc ...

Si sucede en el sitio del cliente, y no es fácilmente reproducible dentro de un depurador desarrolladores, usted podría hacer un poco de depuración post mortem. Me gusta usar UserDump para reunir un archivo de volcado de memoria (.dmp). Luego uso windbg para el análisis.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top