[MEGA APORTE][source] Como detectar errores de hilo padre en prearranque

Iniciado por spiritdead, 24 Diciembre 2012, 11:51 AM

0 Miembros y 1 Visitante están viendo este tema.

spiritdead

buenas tardes a todos
en el dia de hoy, os enseñare como detectar esos dichosos bugs de arranque q ni el mismo visual studio te los ubica :P dando por error

--> Error desconocido, cerrando la aplicacion <--

suelen suceder al migrar la aplicacion a otras pcs y a veces se les olvidan librerias, o alguna incompatibilidad no administrada por el desarrollador

a la hora de atacar dichos problemas siempre debemos tener a mano un Sub modulo de arranque, que monitoree el arranque principal

porque ? porque el submodulo tendria 1 metodo de captado de error, q al ejecutar el verdadero hilo (hilo-padre) y falle directamente el submodulo lo detecte e informe para su rapido fix

suelen denominarse Versiones Debug o para detectar errores

os dejo esta pequeña muestra de codigo

Código (vbnet) [Seleccionar]

'usada para testear errores de thread en caso de emergencia usar
'cuando se use este submain para analisis de bugs de arranque debemos apagar en las propiedades la opcion (habilitar el marco de trabajo de la aplicacion)
'al terminar de reparar el bug debemos volver habilitarle!
Public Class submain
   <STAThread()> _
   Friend Shared Sub Main()

       Application.EnableVisualStyles()
       Application.SetCompatibleTextRenderingDefault(False)

       AddHandler Application.ThreadException, AddressOf Application_ThreadException
       'Added this
       AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionEventRaised
       Application.Run(New Form1())

   End Sub

   Private Shared Sub Application_ThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)

       MessageBox.Show(e.Exception.Message)

   End Sub
   'Added this
   Private Shared Sub UnhandledExceptionEventRaised(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
       If e.IsTerminating Then
           Dim o As Object = e.ExceptionObject
           MessageBox.Show(o.ToString) ' use EventLog instead
       End If
   End Sub

End Class


esta clase, para que puedan ejecutarle como metodo principal de arranque, en las propiedades de vuestro proyecto deben desactivar la opcion  habilitar el marco de trabajo de la aplicacion

con ese tremendo submain, pueden detectar el 100% de los errores ocultos en el arranque, ideal para esas pcs q no les quiere correr vuestro soft y necesitan a fuerza bruta hacer salir el error y lograr repararle :)

disfrutenlo ;)

yo siempre guardo este submain en mis proyectos, y tengo mis versiones debugger para las pcs problematicas ;)

saludos
Facilitador De Tareas - Task Simplifier (FDT)

kub0x

Gracias por colgarlo, jugare con ello un poquillo a ver como luce.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


seba123neo

es lo mismo si pones un try catch en el sub_main, tiene el mismo efecto, si surge un error en la aplicacion salta al sub_main, yo lo tengo asi en una aplicacion.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

spiritdead

Cita de: seba123neo en 26 Diciembre 2012, 21:15 PM
es lo mismo si pones un try catch en el sub_main, tiene el mismo efecto, si surge un error en la aplicacion salta al sub_main, yo lo tengo asi en una aplicacion.

saludos.

a veces usando 1 solo try no obtienes los errores bien detallados, esta es otra forma asignandole eventos asi puedes capturar multiples tipos de errores y obtener respuestas mas exactas

xD muchas formas de verle
Facilitador De Tareas - Task Simplifier (FDT)

Novlucker

Discrepo, con un try/catch si se obtienen los errores detallados, lo que ocurre es que muchas veces en el manejo de errores se pierde el InnerException por ejemplo

Código (csharp) [Seleccionar]
try
{
   
}
catch(Exception ex)
{
    throw ex;
}

!=
Código (csharp) [Seleccionar]
try
{
   
}
catch
{
    throw;
}


Esos fragmentos de código no siempre son iguales :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

spiritdead

Cita de: Novlucker en 26 Diciembre 2012, 22:16 PM
Discrepo, con un try/catch si se obtienen los errores detallados, lo que ocurre es que muchas veces en el manejo de errores se pierde el InnerException por ejemplo

Código (csharp) [Seleccionar]
try
{
   
}
catch(Exception ex)
{
    throw ex;
}

!=
Código (csharp) [Seleccionar]
try
{
   
}
catch
{
    throw;
}


Esos fragmentos de código no siempre son iguales :P

Saludos

xD hay muchas formas de ponerlo :P yo decanto mas por eventos controlados :P en estas cosas  y en cosas pequeñas el try-catch
Facilitador De Tareas - Task Simplifier (FDT)