Visual Basic - Identificar proceso origen de un error

Life is soft - evento anual de software empresarial
 
Vista:

Identificar proceso origen de un error

Publicado por Javier Perales (22 intervenciones) el 06/06/2005 13:19:21
Quiciera saber si hay alguna forma de saber cuál es el procedimiento que genera un error, sin tener que editar una variable por cada procedimiento.

Lo que estoy buscando es crear una rutina de control de errores que pueda insertar en cada uno de los procedimientos de mi aplicación sin tener que editar nada.

Por ej.:

La forma que tengo hasta ahora es la siguiente:

Private Sub Command1_Click()
on error goto ErrorEnElProcedimiento

...Aquí el codigo del procedimiento que no viene al caso

exit sub
ErrorEnElProcedimiento:
'Seguidamente llamo a un procedimiento Global que manejará
'los errores de cualquier procedimiento de la aplicación, y le paso el nombre
'del evento donde se produjo el error:
ManejoDeErroresMio("Command1_Click")
End Sub

Public ManejoDeErroresMio(ProcedimientoDeOrigen as string)

Msgbox "Se produjo un error en el procedimiento " & ProcedimientoDeOrigen

'Y seguidamente mi intencion es guardar tambien la info en un
'archivo log, cuyo codigo iria aqui mismo.

en sub


Ahora bien... como verán este método requiere que tenga que editar cada una de las variables que se pasan al procedimiento de manejo de errores (en el ej. sería "command1_clic")

Si existiese una variable o un modo de saber cual es el procedimiento en ejecución en un momento dado, podría evitarme esta edición reemplazando el nombre del evento por esta variable o función de existir claro esta.

Porque hasta donde sé el objeto err no me arroja esta información, si bien sí da información respetable como err.descripción, pero este codigo que presento acá, haría extremadamente sencillo resolver en donde se produce un error para hacer soporte de nuestra aplicación.
Ya que uno sabría lo más importante, en que evento o procedimiento se produjo el error, sin tener que interrogar al ususario para que nos diga que se encontraba haciendo o cuando exactamente se produce el error, que ni te saben decir.

¿Alguien me podría ayudar?. Gracias
Javier
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Identificar proceso origen de un error

Publicado por EGV (385 intervenciones) el 06/06/2005 17:09:50
Mira no se si te servira, pero este es el codigo que uso actualmente y por el momento me sirve, tal vez lo puedas adaptar a lo que vos necesites.

En el modulo .BAS va esto

Global subrutina As String 'para mandar como parametro al mostrarerror

Sub MostrarError(DesdeLugar As String)
Dim LogFile, CantError As Integer
Dim E, principio, final As String
Dim sigue As String
Dim Fechadehoy
Fechadehoy = Now



principio = "COMIENZO DE LINEA DE ERROR...................."
final = "FINAL DE LINEA DE ERROR......................."
sigue = Chr(13) + Chr(10)
E = "Se produjo el siguiente error:" + sigue + sigue
'arma el string que va a mostrar
E = E + Error$ + sigue
'obtiene el número de error
E = E + "Número: " + CStr(Err)
'beep and show the error
Beep
'MsgBox E, 16, "ERROR"
MsgBox subrutina & sigue & " " & E, 16, "ERROR"
'lo grabo en un archivo
LogFile = FreeFile
Open (App.Path) & "\Error.Log" For Append As #LogFile
Print #LogFile, "" 'le doy una linea en blanco de espacio
Print #LogFile, principio 'comienzo
Print #LogFile, Fechadehoy 'fecha y hora
Print #LogFile, "" 'linea en blanco
Print #LogFile, DesdeLugar 'Rutina en donde se produjo el error
Print #LogFile, E 'error
Print #LogFile, "" 'linea en blanco
Print #LogFile, final 'final
Print #LogFile, "" 'linea en blanco
Print #LogFile, ""
Close #LogFile 'cierre del archivo
CantError = CantError + 1
'si hay mas de 4 errores entonces cierro la aplicación
If CantError > 4 Then
MensajedeError = "Sr USUARIO ,ha ocurrido un error ,en alguno de " & vbCrLf & _
"los archivos del sistema ,por favor no" & vbCrLf & _
"intente hacer nada ,hasta que personal técnico " & vbCrLf & _
"nuestro ,vea qué problema sucedió ,para evitar " & vbCrLf & _
"así la perdida de datos. Le agradeceríamos que " & vbCrLf & _
"se comuníque al:................ de " & vbCrLf & _
"XXXXXX mencionando el problema y nos pondremos " & vbCrLf & _
"en contacto con usted a la mayor brevedad posible." & vbCrLf & _
"Muchas Gracias. "
MsgBox MensajedeError, vbInformation, "A T E N C I O N !!!"
End
End If

End Sub

..........................
luego lo llamas desde cualquier procedimiento del programa

MostrarError subrutina

en la variable subrutina va el nombre del procedimiento o un
texto que vos quieras que haga referencia a ese procedimiento
yo por ej pongo
subrutina = "Desde el load del form anexo3"
subrutina = "Desde sub calcular en el FormCalc"
o el procedimiento que sea

suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identificar proceso origen de un error

Publicado por Javier (22 intervenciones) el 06/06/2005 19:51:19

Es que justamente lo que me quiero evitar es lo último que decis:

............
en la variable subrutina va el nombre del procedimiento o un
texto que vos quieras que haga referencia a ese procedimiento
yo por ej pongo
subrutina = "Desde el load del form anexo3"
subrutina = "Desde sub calcular en el FormCalc"
o el procedimiento que sea
.....................

Lo que busco, es justamente la forma de saber qué procedimiento llamó a la Subrutina, para poder poner en vez de una edición personalizada como la que mencionas (subrutina = "Desde sub calcular en el FormCalc") alguna variable (si la hay) como ser err.
de tal manera que quede así:
subrutina = VariableQueBusco

Me explico mejor:

Por ej err tiene estas posibilidades:

err.descripción (que te tira una descripción del error que te puede dar alguna pista o no)
err.source (que en formularios lo unico que te tira es el nombre de la aplicación
err.number (que te tira el número del error pero no la ubicación).

En fin, busco saber si hay alguna function intrinsica de visual basic similar a err pero que me arroje la simple información de "error en procedimiento xxxxxx".

Es que tengo una aplicación con una importante cantidad de procedimientos (28 formularios y módulos bastante extensos)

Pero si no hay nada tendré que personalizar cada llamada al módulo o procedimiento global que controle los errores.

Te agradezco mucho por tu atención a mi problema.
Saludos
Javier
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identificar proceso origen de un error

Publicado por Javier (22 intervenciones) el 06/06/2005 20:20:37
¿ Cuál es tu versión de Visual ? (la mia 6.0)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identificar proceso origen de un error

Publicado por un amigo (2 intervenciones) el 06/06/2005 21:53:55
EGV:
Has visto las criticas que tienes en el codigo Fuente?

http://lawebdelprogramador.com/codigo/vercomentario.php?idp=1167&pagina=1&id=93&texto=Visual+Basic
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identificar proceso origen de un error

Publicado por Cecilia Colalongo (3116 intervenciones) el 07/06/2005 13:43:21
Revisa el objeto Err y sus propiedades en:

http://msdn.microsoft.com/library/en-us/vbenlr98/html/vaobjErr.asp

En particular la propiedad Source:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vaprosource.asp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identificar proceso origen de un error

Publicado por Javier Perales (22 intervenciones) el 07/06/2005 16:26:30
Gracias Cecilia, pero el objeto err no arroja la información del procedimiento(a no ser que se la incluyas pero eso es lo quiero evitar).
err.source en un formulario te arroja el nombre de la Aplicación que lo produjo... o sea, casi nada.

Muchas gracias por responder a mi inquietud.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar