Accueil de l'archive Service proposé par Hervé AGNOUX

From:           	"VSI" <vsi@wanadoo.fr>
To:             	<windev-java@club.voila.fr>, "JAVA Distribution List" <java@u-strasbg.fr>
Subject:        	equivalent du __FILE__ et du __DATE__ du C++
Date sent:      	Tue, 4 Jan 2000 13:06:42 +0100
Send reply to:  	java@u-strasbg.fr

tout est dans le titre :

comment obtenir le fichier, la ligne, ou la date du fichier source en
cours (.java) pour par exemple l'afficher en cas d'erreur ??

Cordialement,
David

     

From:           	Olivier Dedieu <Olivier.Dedieu@inria.fr>
Date sent:      	Tue, 4 Jan 2000 13:30:53 +0100 (MET)
To:             	java@u-strasbg.fr
Copies to:      	<windev-java@club.voila.fr>
Subject:        	Re: equivalent du __FILE__ et du __DATE__ du C++
Send reply to:  	java@u-strasbg.fr


>  tout est dans le titre :
>  
>  comment obtenir le fichier, la ligne, ou la date du fichier source en
>  cours (.java) pour par exemple l'afficher en cas d'erreur ??

Le nom du fichier peut aisement etre obtenu par le nom de la classe.

La ligne est dispo dans le bytecode mais il n'y a pas d'API pour y
acceder. Sauf a faire de bidouille avec les stack traces.

A ma connaissance, la date du fichier n'est pas dispo dans le
bytecode. Sauf a la demander explicitement à partir du CLASSPATH et du nom
de fichier.

Tu peux neanmoins regarder les packages de log qui ont peut etre des
choses pour faire ca:
http://pharos.inria.fr/Java/annotations?url=http%3A%2F%2Fwww.homestead.com%2FJavaLog%2F

(cependant, l'URL ne semble plus accessible)

a+
-- 
---------------------------------------------------------------
 Olivier Dedieu - (INRIA - Bull / WebTools - Pharos)
 Web: http://www-sor.inria.fr/~dedieu  
 JavaChannel: http://pharos.inria.fr/Java/
 Pharos team: http://webtools.dyade.fr/pharos/
---------------------------------------------------------------


     

Date sent:      	Tue, 04 Jan 2000 14:23:45 +0100
To:             	java@u-strasbg.fr
From:           	Chris F Ravenscroft <ravens@col.bsf.alcatel.fr>
Subject:        	Re: equivalent du __FILE__ et du __DATE__ du C++
Send reply to:  	java@u-strasbg.fr

At 13:30 04/01/00 +0100, you wrote:

>La ligne est dispo dans le bytecode mais il n'y a pas d'API pour y
>acceder. Sauf a faire de bidouille avec les stack traces.
>
>...



>http://pharos.inria.fr/Java/annotations?url=http%3A%2F%2Fwww.homestead.co
>m% 2FJavaLog%2F
Hello,
oui, le package en question ( Grace ) utilise les stack traces, comme je
l'avais fait moi-même de mon côté, ainsi que d'autres développeurs de ma
connaissance. En bref : tout-le-monde semble d'accord que c'est la seule
solution..


     

From:           	Olivier Dedieu <Olivier.Dedieu@inria.fr>
Date sent:      	Tue, 4 Jan 2000 14:31:30 +0100 (MET)
To:             	java@u-strasbg.fr
Subject:        	Re: equivalent du __FILE__ et du __DATE__ du C++
Send reply to:  	java@u-strasbg.fr


>  oui, le package en question ( Grace ) utilise les stack traces,
>  comme je l'avais fait moi-même de mon côté, ainsi que d'autres
>  développeurs de ma connaissance.  En bref : tout-le-monde semble
>  d'accord que c'est la seule solution..
>  

Le pb si je me souviens bien c'est que les stack traces n'on pas un
format homogene d'un JVM à l'autre. Du coup, écrire un parser
generique n'est pas une chose aisée.

a+

---------------------------------------------------------------
 Olivier Dedieu - (INRIA - Bull / WebTools - Pharos)
 Web: http://www-sor.inria.fr/~dedieu  
 JavaChannel: http://pharos.inria.fr/Java/
 Pharos team: http://webtools.dyade.fr/pharos/
---------------------------------------------------------------


     

From:           	Olivier_Thomann@oti.com (Olivier Thomann OTT)
To:             	java@u-strasbg.fr (java)
Organization:   	Object Technology International Inc
Date sent:      	Tue, 04 Jan 2000 12:55:55 -0500
Subject:        	RE: equivalent du __FILE__ et du __DATE
Send reply to:  	java@u-strasbg.fr


> Le nom du fichier peut aisement etre obtenu par le nom de la classe.
Le nom du fichier qui contenait la classe en question peut egalement etre 
 recupere depuis le .class dans l' attribut appele SourceFile. Une classe
non publique peut avoir un   SourceFile qui ne correspondant pas au nom de
sa classe suivi de .java. Voir page 128 des specs de la VM.

> La ligne est dispo dans le bytecode mais il n'y a pas d'API pour y
> acceder. Sauf a faire de bidouille avec les stack traces.
Non mais c'est fort simple d'y acceder depuis le .class en lisant   
quelques bytes. Le probleme est qu'il faut determiner le nom de la  
methode courante et sur quel bytecode a lieu le probleme. En gros c'est  
ce qu'est cense faire printStackTrace(). Malheureusement il ne semble pas 
 qu'il y ait de standard de sortie.


> A ma connaissance, la date du fichier n'est pas dispo dans le
> bytecode. Sauf a la demander explicitement à partir du CLASSPATH et du
> nom de fichier.
Je ne vois effectivement pas d'autres solutions.


Le principal probleme est que toutes ces infos sont des infos de debug.  
Par defaut javac genere le sourceFile attribute et les lineNumber  
attributes. Mais il est possible de compiler sans generer aucun de ces  
attributs ce qui rend quasi impossible de retrouver les infos. Ca donne  
le fameux "Compiled code" dans la stack trace (ceci peut egalement etre  
du a l'usage d'un JIT).

Olivier  

C'est fini ! Retour à l'accueil de la pseudo-archive