Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descripcion de errores (https://www.clubdelphi.com/foros/showthread.php?t=9028)

senpiterno 11-04-2004 04:42:08

Descripcion de errores
 
Hola amigos

Quisiera saber si Delphi pesee algun objeto que contenga o capture los errores que se producen durante la ejecucion de una aplicacion. En visual Basic existe el objeto "err", que contiene la descripcion del error producido, su numero, etc.
¿En Delphi existe algo similar?, lo que pasa es que estoy trabajando el tratamiento de errores (excepciones) en forma centralizada, es decir cualquier error que se produce durante la aplicacion lo derivo a una funcion que envia el mensaje correspondiente al usuario, el cual decide si reintentar o abadonar el prodedimiento, por lo cual necesito tener la descripcion de cualquier error producido en alguna funcion o procedimiento para enviarsela como parametro a la funcion de tratamiento de errores entes mencionada.


Se agradece cualquier ayuda de antemano.

roman 11-04-2004 09:24:24

Para manejar centralizadamente los errores (excepciones) podrías colocar una componente TApplicationEvents e implementar su evento OnException.

También podrías definir un procedimiento

Código:

procedure ManejaExcepcion(E: Exception);
begin
...
end;

y en cada bloque try-except declarar un objeto Exception:

Código:

try
...
except
  on E: Exception do
    ManejaExcepcion(E);
end;

// Saludos

senpiterno 11-04-2004 20:18:53

Gracias Roman, pero cuando intento realizar esto:

procedure ManejaExcepcion(E: Exception);
begin
...
end

Me envia el siguiente error "undeclared identifier exception", que me imagino debe ser porque no reconoce el tipo exception como un idehntificador valido, ¿debo declararlo o usarlo (uses) en alguna parte del proyecto?.......

roman 13-04-2004 04:05:14

Debes incluir la unidad SysUtils

// Saludos

senpiterno 13-04-2004 07:06:09

Gracias Roman

Si fuera posible me gustaria que me ayudaras con lo de las exepciones. Te cuanto, como te he dicho en los anteriores mensajes estoy trabajando las excepciones en forma centralizada, por lo cual, cualquier error ocurrido en la aplicacion se deriva a una funcion que analiza el error y envia el mensaje correspondiente al usuario, mi problema es el siguiente: ¿existe alguna propiedad en las excepciones que me permita idertificar de cual se trata....?, en el siguiente codigo te puede quedar mas clara mi duda:

Function ErroresSistema(ErrorOcurrido: Exception): String;
Begin

if ErrorOcurrido = EDivByZero Then
Begin
......
end

If ErrorOcurrido = ERangeError Then
Begin
......
end

If ErrorOcurrido = EStackOverflow Then
Begin
......
end
.....
.....
end;

La comparacion "ErrorOcurrido = EStackOverflow", no es valida ya que "ErrorOcurrido" es un objeto de tipo exception y "EStackOverflow", es un valor que hace referencia al error ocurrido. ¿existe alguna propiedad del objeto exception que referencie de alguna forma al identificador del error ocurrido y que sea comparable de esta forma "ErrorOcurrido.xxxxx = EStackOverflow", de manera que sean tipos compatibles para la comparacion?....Si existe otra manera de compar tambien podria ser una alternativa...


Cualquier ayuda se agradece de antemano.

roman 13-04-2004 07:31:49

Por ejemplo

Código:

if ErrorIcurrido is EDivByZero then
// Saludos

roman 13-04-2004 07:41:14

Un comentario:

No sé qué tam buena idea sea tratar de centralizar todo el manejo de errores. No se trata sólo de saber qué tipo de excepción se originó. Una misma excepción puede originarse por muy diversos motivos y por ende la forma de salir de ella puede variar según el caso. En tu manejador centralizado no tendrás forma de saber en qué contexto se originó la excepción ni cuál es la medida adecuada para salir de ella.

// Saludos

jachguate 13-04-2004 08:07:47

Yo creo que la mencionada "centralización" de manejo de excepciones podria tener sentido solo para llevar un registro (log) de las mismas... pero poco sentido tiene "manejarlas" de forma centralizada, ya que se pierde la filosofía misma que soporta las excepciones: Tratar los errores lo mas cerca posible de donde se producen, manteniendo un mecanismo que permite cada vez ir mas "fuera" del código.

Si lo haces de forma "centralizada"... cómo podrias reintentar una operación sin saber siquiera donde se ha originado???

Quizas se pueda crear un par de funciones especializadas en ciertos tipos de errores, que sean invocadas desde las clausulas except... pero el manejo de excepciones debe mantenerse alli, y como sana práctica de programación, lo que tienda a fallar y quiera ser controlado, debe seguir metiendose entre clausulas try except end.

Hasta luego.

;)

senpiterno 13-04-2004 10:06:38

Hola amigosGracias de nuevo roman. Quisas mi idea de centralizar el manejo de errores no ha sido bien explicada de mi parte. Obviamente cada error obedece a condiciones y eventos distintos y como tal, estos deben ser tratados en forma particularizada e individual, cuestion que de preferencia debe ser atendida dentro del mismo procedimiento o funcion, pero los mensajes que se le envian al usuario por causa de estos errores, si pueden ser tratados en forma centralizada, ya que un error en si, es siempre el mismo, lo que cambia es la causa que lo provoco, causa que puede ser enviada como parametro a la funcion que maneja el envio de mensajes por los erros producidos. Quisas un mejor nombre para mi idea seria: manejo centralizado de los mensajes de error.
Ya que estamos hablando de los errores, me asalta otra duda, ¿una vez producido un error y capturado en la estructura try.....except, es posible volver la ejecucion a la misma linea o linea siguiente en la que se produjo el error?, esto podria ser util cuando el error se deba a causas del entorno (las cuales pueden cambiar de un momento en otro), por lo cual el error seria recuperable, reintentando utilizar el mismo codigo en donde se genero....

De antemano se agradece cualquier ayuda.

jachguate 13-04-2004 21:40:28

Hola senpiterno

Te recomiendo, de acuerdo a la guía de estilo de los foros, que para esta nueva pregunta habras un nuevo hilo.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 04:37:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi