Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Excepciones - Origen función y linea (https://www.clubdelphi.com/foros/showthread.php?t=56854)

jlrbotella 29-05-2008 13:55:07

Excepciones - Origen función y linea
 
Hola:

¿Hay alguna forma de saber de donde se originan las excepciones, es decir, la función donde se ha producido, fichero y linea del código fuente?.

Un saludo,
JL

cHackAll 29-05-2008 14:20:45

uno, dos, etc...

pcicom 29-05-2008 14:21:27

En las mismas opciones de DELPHI.

Menu

Tools
- Debugger Options - Languaje Exceptions - Stop on Delphi Exceptions

jlrbotella 29-05-2008 15:05:20

Excepciones
 
No me refería a eso.

Quiero crear una rutina que cuando reciba una excepcion me genere un fichero log, donde me informe del error y la línea, fichero del codigo fuente.

Algo como el programa de eurekalog

Un saludo,
JL

Neftali [Germán.Estévez] 29-05-2008 15:27:00

Uno, dos, tres,...

jlrbotella 29-05-2008 16:21:14

Gracias, pero no quiero comprar ni el producto de Eureka, ni tampoco el de mad. Solo quiero saber si alguien lo ha intentado hacer.

Un saludo,
JL

Delphius 29-05-2008 17:04:04

Hola jlrbotella,
Creo que lo dicho aquí te puede servir.

Saludos,

jlrbotella 29-05-2008 18:36:35

Gracias, delphius.

Aunque no comprendo que ha estas alturas que llevamos no se haya ampliado la clase expceción, para poder averiguarlo en modo runtime, tal como lo hace otros lenguajes (Java y .Net). De todas maneras, investigaré el ejemplo que me has indicado.

Un saludo,

Ñuño Martínez 30-05-2008 09:19:01

Yo, para eso, extiendo Exception y añado al constructor un par de parámetros para indicar el archivo y el procedimiento y función. Por ejemplo:
Código Delphi [-]
PROCEDURE Procedimiento;
BEGIN
  TRY
    // blablabla...
  EXCEPT
    ON Error: Exception DO RAISE MiClaseExcepcion.Create ('Unit.pas',  'Procedimiento', Error.Message);
    ON Error: MiClaseExcepcion DO RAISE Error;
  END;
END;
No es lo mismo, pero ayuda bastante.

Neftali [Germán.Estévez] 30-05-2008 10:02:43

Cita:

Empezado por jlrbotella (Mensaje 289959)
...no comprendo que ha estas alturas que llevamos no se haya ampliado la clase expceción, para poder averiguarlo en modo runtime, tal como lo hace otros lenguajes (Java y .Net). De todas maneras, investigaré el ejemplo que me has indicado.

Creo que no se ha añadido porque hay diferencias sustanciales entre Java y .NET y el código que genera Delphi.
Para que Delphi conozca esa información necesita los ficheros de Debug (información adicional); Esa información normalmente no se usa o no se necesita. Si ampliaras la clase Exception para extraer esa información tal vez estarías obligando a añadir esos ficheros siempre, cosa que no es en absoluto práctica.

cHackAll 30-05-2008 15:29:43

NO ha punto de comparación !!!

El JVM utiliza un lenguaje intermedio de bajo nivel, que es de mayor nivel que el lenguaje de maquina el cual es la plataforma del lenguaje como tal y le permite ser multiplataforma. Hasta donde yo se NO se puede manejar al antojo las funciones propias de la plataforma porque esto rompería con la filosofía, entonces con dicha imposibilidad viene un manejo de excepciones a un nivel más accesible al programador propio del JVM.

El .NET también utiliza un lenguaje intermedio y nativo ejecutado en una maquine virtual que vislumbra la misma filosofía del JVM. Lo que al igual que el anterior le da otra visión al control de excepciones.

Pero qué hay con Delphi? (NO hablamos de Delphi .NET), éste desde siempre ha permitido el embebido de lenguaje de máquina, lo que facilita el acceso a cualquier parte de la memoria virtual del propio proceso, la libre modificación del entorno y de uno mismo sin ningún lenguaje intermedio entre el lenguaje de programación y el de máquina. Este nos permite acceder al segmento del contexto fs:[0], y con el mismo al controlador de excepciones propio de la librería ntdll.dll del Güindos, el cual comunica las excepciones de menor nivel al proceso.

Aquí un ejemplo fácil de usar y gratuito.

Espero no haber sido algo técnico pero repito el primer enunciado...

Saludos


La franja horaria es GMT +2. Ahora son las 05:36:51.

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