Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Debugear en tiempo de ejecucion ? (https://www.clubdelphi.com/foros/showthread.php?t=25840)

Lepe 13-10-2005 19:48:46

Cita:

Empezado por ingel
la info que me da es:

UNITNAME: dice OLEDBAccess en lugar de la unit que se produjo ...
Porcedure : ToleDbConnection.oledberror
Line : 0

En el primer formulario que crea en tu applicación ¿has puesto uses lpjcldebug
como primer uses de la ventana?

¿Seguro que has hecho un Build Project o Build All? Si no lo haces, no se genera de
nuevo el archivo .map, por tanto las referencias son las antiguas, basta que
hayas creado nuevos procedimientos para que no sea capaz de encontrar las
entradas en el .map

Cita:

este es el txt tectual del log:

[13/10/2005 12:14:08]Exception EMSError: Línea 1: sintaxis incorrecta cerca de 'fromm'.>
[13/10/2005 12:39:11]Exception EConvertError: ' ' no es un valor entero válido

Exception
UnitName : SysUtils
Procedure : ConvertErrorFmt
Line : 0 OffsetLine : 0
Deep of Except frame-dump : 5
UnitName : SysUtils Procedure : ConvertErrorFmt SourceName : Line : 0

UnitName : uMain Procedure : TMainMenu.Button1Click SourceName : uMain.pas Line : 2224
UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0
UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0
El error que da al principio del texto es donde se hace un Raise
Exception.Create
, o un simple Raise en bloques try...except. El
Frame-Dump es el volcado de llamadas que se han hecho anteriormente hasta
llegar al que levantó la excepción; en este caso se ha podido rastrear 5
llamadas, si tu error está 7 llamadas antes, no vas a poder identificar la linea
exacta (auque esto ocurre muy pocas veces ;))
Cita:

Exception EConvertError: ' ' no es un valor entero válido
Esto significa que en Umain.pas linea 2224 estarás usando un
StrToInt(edit1.text), o algo similar, pero el usuario no ha escrito nada en
Edit1, Usa StrtointDef para pasar un valor por defecto.


Siempre vas a ver código de DB.pas, Sysutils.pas y similares, ya que es allí donde se levantan excepciones. Ahora te toca levantar tus propias excepciones:
Código Delphi [-]
  try
    Strtoint(edit1.text);
  except
     edit1.text:= '0';
     Raise Exception.Create('Quillo no seas malo y mete un numero en el Edit1');
  end;

saludos

ingel 14-10-2005 14:00:55

ultimas consultas ..espero
 
Lepe , agradezco tu paciencia ...

necesito consultarte puntualmente :

1. El registro de los errores se generan siempre que se produce un error o
solo cuando se produce en una instruccion encerrada en un try /except ?

2. En el menu general del sistema que estoy modificando hay un procedure :

procedure TMainMenu.AppException(Sender: TObject; E: Exception);

y dentro de el se graba un log de errores (muy humilde :D ) .. pero mi duda
es si PASA POR AHI ..cada vez que se produce un error en CUALQUIER parte
del sistema .. o hay que poner el control de errores en cada Formulario.
(Lo que mas me interesa controlar son las grabaciones en la base de datos
que se hacen con Stores procedures)

3. Lo que me comentaste del control de las Ventanas ... donde iria ese codigo ?

4. el archvo log que se me genera es el siguiente:

Cita:

[13/10/2005 12:14:08]Exception EMSError: Línea 1: sintaxis incorrecta cerca de 'fromm'.>
[13/10/2005 12:39:11]Exception EConvertError: ' ' no es un valor entero válido>
[14/10/2005 8:17:11]Exception EConvertError: ' ' no es un valor entero válido>
[14/10/2005 8:19:53]Exception EConvertError: ' ' no es un valor entero válido>
[14/10/2005 8:24:54]Exception EConvertError: ' ' no es un valor entero válido>
[14/10/2005 8:35:41]Exception EConvertError: ' ' no es un valor entero válido
Exception
UnitName : SysUtils
Procedure : ConvertErrorFmt
Line : 0 OffsetLine : 0
Deep of Except frame-dump : 5
UnitName : SysUtils Procedure : ConvertErrorFmt SourceName : Line : 0
UnitName : uAbmCreditos Procedure : TFAbmCreditos.Button1Click SourceName : uAbmCreditos.pas Line : 989
UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0
UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0
y aca van 2 preguntillas...
como veras luego de Exception ... no me da info del PAS , ni la linea donde se produce el error (Line : 0 OffsetLine : 0)
es esto correcto ?..me da la linea en el frame-dump , pero solo una , el resto esta en 0 cero.

- y la otra .. me deja registrado el detalle de la ULTIMA exepcion ..las 5 primeras solo me queda [13/10/2005 12:14:08] ....
debo tener algun error al grabar el log?

un saludo , no te atormento mas ........por un rato :D

Lepe 14-10-2005 16:05:34

Cita:

Empezado por ingel
1. El registro de los errores se generan siempre que se produce un error o
solo cuando se produce en una instruccion encerrada en un try /except ?

La respuesta es bastante amplia, te aconsejo que busques en estos foros por
"la cara oculta de delphi 4 ", en ese libro se explica como trabajar con las
excepciones, y en el foro hay muchas preguntas sobre este tema (nada más
tienes que buscar por "Exception"). Como comprenderás es necesario saber
qué es una Excepción, como se produce, y que hace, para despues entender
como capturarlas y manejarlas.

Cita:

Empezado por ingel
2. En el menu general del sistema que estoy modificando hay un procedure :

procedure TMainMenu.AppException(Sender: TObject; E: Exception);

y dentro de el se graba un log de errores (muy humilde :D ) .. pero mi duda
es si PASA POR AHI ..cada vez que se produce un error en CUALQUIER parte
del sistema .. o hay que poner el control de errores en cada Formulario.
(Lo que mas me interesa controlar son las grabaciones en la base de datos
que se hacen con Stores procedures)

Sin duda has querido decir TApplicationEvents ya que un MainMenu no tiene
la opción de Excepciones.

Si no hay try... except en ninguna rutina, la excepción llegará al Objeto
Application. Si hay try ... except, debes entender la palabra reservada
Raise; qué hace y si conviene usarla.
Cita:

Empezado por ingel
. Lo que me comentaste del control de las Ventanas ... donde iria ese codigo ?

Básicamente en el ApplicationEvents en el evento OnException, o donde
quiera que se produzca una excepción que no se controle con Raise;
Cita:

Empezado por ingel
4. el archvo log que se me genera es el siguiente:

y aca van 2 preguntillas...
como veras luego de Exception ... no me da info del PAS , ni la linea donde se produce el error (Line : 0 OffsetLine : 0)
es esto correcto ?..me da la linea en el frame-dump , pero solo una , el resto esta en 0 cero.

Yo no he creado el JCLDEBUG :D, así que no puedo contestarte. Lo que sí
puedo decir es que algunas veces tambien obtengo esos resultados. Pero
obviamente, el error lo tienes en TFAbmCreditos.Button1Click, y jclDebug te lo está diciendo.

Cita:

Empezado por ingel
- y la otra .. me deja registrado el detalle de la ULTIMA exepcion ..las 5 primeras solo me queda [13/10/2005 12:14:08] ....
debo tener algun error al grabar el log?

Utiliza siempre un Build Project en lugar de compilar. Esa situación jamás la he visto.

Que conste que no te estoy dando "largas", simplemente te toca a ti, buscar, leer, entender, comprobar y practicar. Es la única forma de aprender.

saludos

Lepe 12-05-2006 19:23:13

Reabro este hilo solo para comentar un detalle solicitado por Dec Según la documentación de la JVCL 3, el archivo .map puede borrarse despues de hacer el "Buid Project", en el exe se incluye la información de depuración.

Saludos


La franja horaria es GMT +2. Ahora son las 03:26:47.

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