Sei sulla pagina 1di 12

Laboratorio de Programacin

Trazas
Dpto. de Ingeniera de Sistemas Telemticos http://www.lab.dit.upm.es/~lprg/

febrero 2010

Puesta a punto
fallo serio

desarrollo
falla

pruebas
pasa detalle

pruebas de aceptacin
pasa

dnde falla qu? trazas

falla

febrero 2010

Trazas

Trazas
Segn va ejecutando el programa
estoy aqu ... esta variable vale tanto ...

De forma que podemos ir siguiendo la ejecucin


con diferentes niveles de detalle

febrero 2010

Trazas

print
Se pueden introducir sentencias explcitas
System.out.println(estoy aqu ...); System.out.println(variable= + valor);

Problemas
hay que editar el programa cada vez que queremos cambiar una traza cuando se entrega el programa hay que editarlo y quitar las trazas si el programa est compilado y algo falla, hay que editarlo para ver qu pasa
febrero 2010 Trazas 4

log.Logger
Trazas programadas a diferentes niveles
LOGGER.info(estoy aqu ...); LOGGER.fine(variable= + valor); LOGGER finer(condicin= + condicin);

de forma que en ejecucin podemos decidir cunto se traza


de un cierto nivel en adelante

febrero 2010

Trazas

package log.Logger
Creado especficamente para las prcticas de LPRG Inspirado en java.util.logging de la librera de Java, pero adaptado a la asignatura Es necesario incluir el paquete import log.Logger normalmente residir en /log/Logger.java Y crear un logger Logger LOGGER = Logger.getLogger(NOMBRE)

febrero 2010

Trazas

El nombre del Logger


Suele utilizarse el nombre de la clase:
private static final Logger LOGGER= Logger.getLogger("paquete.clase")

Pero podra utilizarse el del paquete


private static final Logger LOGGER= Logger.getLogger("paquete")

O, incluso el de un mtodo
private static final Logger LOGGER= Logger.getLogger("paquete.clase.metodo")

febrero 2010

Trazas

Nivel de detalle
900 800 700 500 400 300 -
febrero 2010

OFF

1000 SEVERE WARNING INFO

CONFIG

FINE

FINER

FINEST

ALL
Trazas 8

Nivel de detalle
OFF No se genera traza alguna. SEVERE Se usa para trazar errores catastrficos, que son aquellos de los que no hay recuperacin posible, provocando la terminacin del programa. La traza recoge el fallo causante de la detencin. WARNING Se usa para trazar errores peligrosos, para los que hay previsto un mecanismo de supervivencia. INFO Trazas normales: para ir viendo lo que pasa. CONFIG Se usan tpicamente al arrancar un programa para trazar la configuracin inicial, que frecuentemente se lee de alguna parte. FINE Informacin de detalle, tpicamente til para localizar errores (depuracin). FINER Informacin de ms detalle, tpicamente til para localizar errores (depuracin). FINEST Informacin de mximo detalle, tpicamente til para localizar errores (depuracin). ALL Se traza todo, a cualquier nivel.
febrero 2010 Trazas 9

Niveles
log.severe (String); log.warning (String); log.info (String); log.config (String); log.fine (String); log.finer (String); log.finest (String);

.level= INFO

febrero 2010

Trazas

10

$HOME/java.logger
# mnimo nivel que aparecer por consola o fichero .level= ALL # mnimo nivel que aparecer por consola (System.err) .console.level= ALL # mnimo nivel que aparecer en fichero .file.level= SEVERE .file.name= J$.log # mnimo nivel que aparecer del logger indicado # NOMBRE_DEL_LOGGER= NIVEL paquete= nivel paquete.clase= nivel paquete.clase.metodo= nivel

febrero 2010

Trazas

11

ejemplo

class Polinonio2

package ejemplo; public class Polinomio2 { private double a, b, c; public Polinomio2(double a, double b, double c) { this.a = a; this.b = b; this.c = c; public double[] raices() throws Exception { } double determinante = (b * b) - (4 * a * c); public double y(double x) { return (((a*x)+b)*x)+c; } if (determinante < 0) throw new Exception("no hay raices reales"); double double double return } }
febrero 2010 Trazas 12

t = Math.sqrt(determinante); r1 = (-b + t) / (2 * a); r2 = (-b - t) / (2 * a); new double[] { r1, r2 };

ejemplo

Trazas INFO

package ejemplo; import log.*; public class Polinomio2 { private static final Logger LOGGER = Logger.getLogger("ejemplo.Polinomio2"); public Polinomio2(double a, double b, double c) { LOGGER.info("new Polinomio2 " + a + " " + b + " " + c); ... public double y(double x) { LOGGER.info("y " + x); ... public double[] raices() throws Exception { LOGGER.info("raices"); ...

febrero 2010

Trazas

13

ejemplo

Trazas FINE

public double[] raices() throws Exception { LOGGER.info("raices"); double determinante = (b * b) - (4 * a * c); LOGGER.fine("determinante= " + determinante); ...

febrero 2010

Trazas

14

ejemplo

Trazas FINEST

public double[] raices() throws Exception { LOGGER.info("raices"); double determinante = (b * b) - (4 * a * c); LOGGER.fine("determinante= " + determinante); if (determinante < 0) throw new Exception("no hay raices reales"); double t = Math.sqrt(determinante); double r1 = (-b + t) / (2 * a); LOGGER.finest("r1= " + r1); double r2 = (-b - t) / (2 * a); LOGGER.finest("r2= " + r2); return new double[] { r1, r2 }; }
febrero 2010 Trazas 15

ejemplo

Probador

import ejemplo.*; public class Probador { public static void main(String[] argumentos) throws Exception { Polinomio2 polinomio= new Polinomio2(1, -3, 2); double[] raices= polinomio.raices(); System.out.println("raiz= " + raices[0]); System.out.println("raiz= " + raices[1]); } }

febrero 2010

Trazas

16

ejemplo

Ejecucin

C:\Documents and Settings\<usuario>\java.logger ejemplo= OFF

se necesita este fichero

bash-3.1$ java Probador java.logger <- C:\Documents and Settings\<usuario>\java.logger raiz= 2.0 raiz= 1.0

febrero 2010

Trazas

17

ejemplo

Ejecucin

C:\Documents and Settings\<usuario>\java.logger ejemplo= INFO

bash-3.1$ java Probador java.logger <- C:\Documents and Settings\<usuario>\java.logger ejemplo.Polinomio2 [info]: new Polinomio2 1.0 -3.0 2.0 ejemplo.Polinomio2 [info]: raices raiz= 2.0 raiz= 1.0

febrero 2010

Trazas

18

ejemplo

Ejecucin

C:\Documents and Settings\<usuario>\java.logger ejemplo= FINE

bash-3.1$ java Probador java.logger <- C:\Documents and Settings\<usuario>\java.logger ejemplo.Polinomio2 [info]: new Polinomio2 1.0 -3.0 2.0 ejemplo.Polinomio2 [info]: raices ejemplo.Polinomio2 [fine]: determinante= 1.0 raiz= 2.0 raiz= 1.0

febrero 2010

Trazas

19

ejemplo

Ejecucin

C:\Documents and Settings\<usuario>\java.logger ejemplo= ALL

bash-3.1$ java Probador java.logger <- C:\Documents and Settings\<usuario>\java.logger ejemplo.Polinomio2 [info]: new Polinomio2 1.0 -3.0 2.0 ejemplo.Polinomio2 [info]: raices ejemplo.Polinomio2 [fine]: determinante= 1.0 ejemplo.Polinomio2 [finest]: r1= 2.0 ejemplo.Polinomio2 [finest]: r2= 1.0 raiz= 2.0 raiz= 1.0

febrero 2010

Trazas

20

10

Jerarqua de nombres
Si ponemos
getLogger(a.b.m)

1. Busca en java.logger a.b.m = ... 2. si no lo encuentra, busca a.b = ... 3. si no lo encuentra, busca a = ... 4. si no lo encuentra, usa .level = ...
febrero 2010 Trazas 21

Traza en ...
Consola
.console.level = ... nivel a partir del cual se registra

Fichero
.file.level= ... .file.name= J$.log fecha y hora

el fichero se llama C:\Documents and Settings\<usuario>\J20080304211041.log

febrero 2010

Trazas

22

11

Conclusiones
Cuando un programa no funciona
las trazas descubren cmo se llega al fallo

Las trazas son una inversin a futuro


deben quedar en el cdigo para siempre

Conviene controlar el detalle de trazado Ver apuntes de la asignatura


http://www.lab.dit.upm.es/~lprg/material/apuntes/log/log.htm

febrero 2010

Trazas

23

12

Potrebbero piacerti anche