Question

Je me demandais si quelque chose existe (dans le monde Java) capable de prendre un instantané de l'état actuel machine virtuelle Java avec les caractéristiques suivantes:

  • Faites-en une exception est levée.
  • capture les variables locales, les arguments de la méthode, etc.
  • Mettez dans un fichier très pratique qui peut être utilisé pour extraire ou reproduire dans un IDE la situation dans votre code source.

Les deux premières caractéristiques sont nécessaires (troisième serait génial). Et il doit être adapté à une utilisation de la production (donc il n'y a aucun moyen sur les débogueurs).

Avant de demander à ce que j'ai cherché à travers le WWW (aussi longtemps que possible) et je l'ai trouvé quelques indications:

  • Cajoon Interceptor : Comme le dit Dzone après, il est un agent JVM passif qui remplissent les trois conditions! Mais, il a deux inconvénients: vous devez payer pour cela et le site est (peut-être il n'y a aucune chance de payer quoi que ce soit)
  • .
  • AviCode Intercept studio : équivalent .NET de Cajoon. Juste pour vous donner une idée au sujet.
  • JavaFrame : Ok, il est un tweet, mais il pointe vers un repo SVN disponible qui avoir le code source (sous licence MIT) d'un agent JVM qui a l'air bien (je vais donner un essai à elle).

Alors, je suis peut-être à la recherche d'une solution non existante? Ce n'est pas urgent, mais j'ai eu cette idée d'un projet et ce serait génial d'explorer ce chemin (?) « Inconnu » et obtenir quelque chose de réel.

Il semble clair que ce serait un agent JVM (événement d'exception de JVMTI, pour exemple ).

Enfin, je voudrais souligner le paragraphe followin de article Gestion des exceptions Wikipedia :

  

Dans les environnements de moteur d'exécution tels que   Java ou .NET, il existe des outils qui   attacher au moteur d'exécution et tous les   temps qu'une exception d'intérêt   Se produit, ils enregistrent le débogage   des informations qui existaient dans la mémoire à   moment où l'exception a été levée   (Appeler les valeurs de la pile et tas). Celles-ci   les outils sont appelés Exception automatisée   Outils d'interception Manipulation ou erreur   et de fournir des « causes racine » informations   des exceptions.

C'est l'idée. J'espère que quelqu'un peut me donner un aperçu ou peut-être, à l'avenir, quelqu'un vous inspirer par cet humble message:)

Merci!

Était-ce utile?

La solution

Je donne un coup d'oeil à JavaFrame et il semble un bon point de départ. Il suffit d'installer Apache Ant, faire dans le répertoire ant de javaframe et lancer la suite de tests (dans le répertoire de test) avec:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

Il ne reçoit pas une variable locale, mais il essaie. Alors, comme je l'ai dit, il peut être un point de départ. J'espère obtenir de plus amples sur son utilisation, mais pas le temps et pas de documentation (il y a beaucoup de projets nommés JavaFrame) sont mauvaises circonstances.

Peut-être un jour, il peut être fait à nouveau. Oui encore. Il y avait Cajoon, il avait l'air prometteur et brillant, mais son site est en panne et il n'y a aucune trace de pot téléchargeable pour essayer.

Merci à tous!

PD .: Juste pour référence, quelques liens que je trouve en faisant des recherches:

Autres conseils

Vous pouvez regarder dans le travail que NetBeans a fait en ce qui concerne l'enregistrement d'utilisation automatisée: http: // wiki. netbeans.org/UsageLoggingSpecification .

En ce qui concerne le dumping des variables locales, je suppose que vous pouvez simplement utiliser un débogueur, comme celui qui bajafresh4life mentionné.

Peut-être que cela pourrait se faire avec AspectJ ?

Je ne sais pas si cela est viable dans un environnement de production, mais il y a le débogueur Omniscient:

  

Que faire si votre débogueur pourrait aller « revenir en arrière dans le temps? » Est-ce que rendre le débogage plus facile? Par simple enregistrement de toutes les affectations de variables, il est possible de faire pour l'essentiel. Telle est l'idée sous-jacente pour le débogage omniscient. La partie étonnante est que beaucoup de grands programmes peuvent être débogués de cette façon - Ant, JUnit, le débogueur lui-même.

http://www.lambdacs.com/debugger/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top