Ver Mensaje Individual
  #9  
Antiguo 19-05-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
De vuelta a la pregunta original del hilo, creo que mas bien la pregunta surge por desconocimiento real de que está ocurriendo.

Febito, muchas de las excepciones son por Access violation read/write de tal o cual direccion de memoria

Si es un Read, significa que tu aplicación se ha ido a leer a una parte de la memoria donde no hay variables de tu programa, es decir, puedes estar leyendo una parte de la memoria donde reside algo perteneciente a otro programa o incluso del sistema operativo, y por supuesto tu aplicación se va a volver loco con el valor leido si no tratas la excepcion, o arreglas el código fuente.

Si es un Write, entonces es todavia más pelilgroso, ya que estas escribiendo en una zona de memoria donde reside otro programa, por tanto, fallará tu programa y probablemente, el sistema operativo u otra aplicación que tengas abierta.

Lo que sí podrías hacer es un log con las excepciones que se producen, de esta forma el usuario final del programa no vé la pantalla de acces violation, pero de vez en cuando, mirarías ese log y verias donde se producen errores para corregirlos, CORRIGELOS !!! no las dejes ahí.

Existen multitud de componentes para este fin, yo uso las LMDTOOLS, en el que se puede deshabilitar el mostrar las excepciones, y derivarlo a un log directamente, el resultado es algo parecido a esto:
Código:
LogFile started: 18/05/2004 15:38:12
Application    : Project1
Path/ExeName   : E:\Delphi\Proyectos\Project1.exe
***************************************

Entries:
00001:  [15:38:12] [18/05/2004]TPanel (Name: pnlImprimir): TblAlbaranes:
 Dataset not in edit or insert mode, Address: 004E7650
Como puedes apreciar es muy importante darle nombre a todos los componentes que usas ya que si te dice (Name: Panel1) ... a saber donde está ese panel en la aplicación

El código en delphi es este:
Código Delphi [-]
procedure TFrmMdi.LMDApplicationCtrl1Exception(Sender: TObject;
  E: Exception; var Cancel: Boolean);
begin
  LMDApplication.LogException(sender);
  Cancel := True; // evita que salga en pantalla
end;

Intuyo que esto es lo que querias preguntar, no febito??
Responder Con Cita