java - introspection

java - introspection - Java - Programmation

Marsh Posté le 18-02-2004 à 09:29:59    


Salut
 
j'aimerais savoir s'il existe un moyen de connaitre le nom de la méthode dans laquelle on se trouve, à l'exécution (l'idée étant de faire une méthode d'affichage d'erreur généralisée).

Reply

Marsh Posté le 18-02-2004 à 09:29:59   

Reply

Marsh Posté le 18-02-2004 à 09:43:59    

Non. A part en utilisant les stacktrace.

  • En jdk <= 1.3 c'est difficile : il faut parser le flux que tu peux récupérer en faisant un e.printStackTrace() dans un buffer
  • En jdk1.4 c'est déjà plus facile : tu peux récupérer les StackTraceElement d'une exception et tu peux récupérer dessus le nom de la méthode.
  • En jdk1.5 c'est encore plus facile : tu n'es plus obligé de générer une exception pour obtenir les stackTrace : tu peux directement récupérer les StackTraceElement d'un Thread


Message édité par benou le 18-02-2004 à 09:44:46

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 18-02-2004 à 10:17:55    

ah le bon vieux currentContext de smalltalk.
 
 
Par contre, je suis étonné qu'un débutant ait besoin de ça. Que veux-tu faire exactement ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-02-2004 à 10:22:38    

C'est ce qui me fallait, merci.
 
J'avais besoin de ça pour un truc tout bête :
en plus d'afficher l'exception, je voulais afficher le nom de la méthode d'où elle était lancée (sans afficher toute la pile).
La solution était pas bien loin en fait  :o


Message édité par gaaar le 18-02-2004 à 10:28:38
Reply

Marsh Posté le 18-02-2004 à 10:27:36    

nraynaud a écrit :


Par contre, je suis étonné qu'un débutant ait besoin de ça. Que veux-tu faire exactement ?


 
pourquoi un debutant ? :??:


---------------
IVG en france
Reply

Marsh Posté le 18-02-2004 à 10:29:36    

c'est vrai, d'où tu sort ça ?

Reply

Marsh Posté le 18-02-2004 à 10:34:20    

benou a écrit :


  • En jdk1.5 c'est encore plus facile : tu n'es plus obligé de générer une exception pour obtenir les stackTrace : tu peux directement récupérer les StackTraceElement d'un Thread



 
chouette ca  :)


---------------
IVG en france
Reply

Marsh Posté le 18-02-2004 à 10:34:46    

uriel a écrit :

pourquoi un debutant ? :??:

il cherche pas encore tout seul dans les docs ?
 
 
par contre, je me suis planté : il avait effectivement besoin de ça (enfin, pas exactement du contexte courant, mais de celui d'une exception), exactement dans une des seules utilisations correctes de ce truc.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-02-2004 à 15:16:39    

uriel a écrit :


chouette ca  :)  


ouep. :)
 
je me suis toujours étonné qu'il faille passer par une exception pour pouvoir afficher la stackTrace. C'est quand même bizarer que ca ait pas été disponible avant  :sweat:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 18-02-2004 à 15:30:40    

benou a écrit :

je me suis toujours étonné qu'il faille passer par une exception pour pouvoir afficher la stackTrace. C'est quand même bizarer que ca ait pas été disponible avant  :sweat:

Non, c'est un bordel monstre, mais c'est obligatoire pour les exceptions.
 
Il faut :
 1) retrouver d'ou vient tout le code qui a été exécuté (donc en cas d'inlining, il faut poser des marqueurs, aller chercher les méthodes)
 
 2) instancier tous les objets représentant la pile, chercher les arguments qui auraient dû être passés sur la pile (mais qui ne l'ont pas forcément été pour cause d'optimisation)
 
 
bref, c'est un vrai bordel pour l'optimiseur.
 
En plus en dehors des exceptions, il ne doit pas y avoir beaucoup d'utilisations à ça (en dehors de trucs très très dynamiques et inoptimisables : sérialisation de tâches dans le langage, manipulation du flux d'exécution, continuations).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-02-2004 à 15:30:40   

Reply

Marsh Posté le 18-02-2004 à 15:34:01    

non, mais moi ca me permettais de suivre le programme, un genre de debugger à moi et passer par les exceptions, c'etait chiant (en plsu je voyais pas le pourquoi)


Message édité par uriel le 18-02-2004 à 15:34:32

---------------
IVG en france
Reply

Marsh Posté le 18-02-2004 à 15:37:18    

uriel a écrit :

non, mais moi ca me permettais de suivre le programme, un genre de debugger à moi et passer par les exceptions, c'etait chiant (en plsu je voyais pas le pourquoi)

ça ça se fait au niveau VM, il y a un protocole de dialogue avec les JVM.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-02-2004 à 17:44:00    

nraynaud a écrit :

ah le bon vieux currentContext de smalltalk.

c'est jouable en java aussi, y'a un paquets de frameworks AOP qui le font (savoir dans quelle methode on se trouve, ie acceder à la pile d'appels)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-02-2004 à 17:46:40    

the real moins moins a écrit :

c'est jouable en java aussi, y'a un paquets de frameworks AOP qui le font (savoir dans quelle methode on se trouve, ie acceder à la pile d'appels)

bah oui, tu lances une exception, tu la catches et tu regardes la stacktrace.
 
ou alors (si le temps ne compte pas) tu poses des balises en entrée et (plus dur) en sortie de fonction.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-02-2004 à 17:50:19    

nraynaud a écrit :

bah oui, tu lances une exception, tu la catches et tu regardes la stacktrace.
 
ou alors (si le temps ne compte pas) tu poses des balises en entrée et (plus dur) en sortie de fonction.

euh pour l'exception, vu le coût, je doute que les frameworks tel aspectj, aspectwerkz ou meme nanning (qui d'apres son auteur est moins performant) fassent ça.
 
par contre ils vont probablement brouter le bytecode à la volée, oui..


Message édité par the real moins moins le 18-02-2004 à 17:50:33

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-02-2004 à 17:51:31    

sinon au lieu de développer en spécifique un système de gestion d'erreurs, log4j fait ca de base aussi :)

Reply

Marsh Posté le 18-02-2004 à 17:53:57    

moi je vote pour l'aop, splus propre :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-02-2004 à 18:33:31    

nraynaud a écrit :

bah oui, tu lances une exception, tu la catches et tu regardes la stacktrace.


pas besoin de la lancer/catcher : suffit de la créer ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 18-02-2004 à 18:44:48    

benou a écrit :


pas besoin de la lancer/catcher : suffit de la créer ...

'tain, t'as raison, je pensais que c'était le "throw" qui remplissait la trace, mais c'est le constructeur. C'est à moitié dangereux ça !


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed