web-dev-qa-db-fra.com

comment puis-je déboguer un pot au moment de l'exécution?

Je suis dans une position assez étrange (de mon point de vue Java-novice):

  1. en utilisant Eclipse, j’ai écrit un "programme Java" (des fichiers .Java contenant des classes) qui, essentiellement (batch), lit un fichier texte * .csv, "évalue" son contenu et enregistre les résultats dans un fichier texte * _out.csv. Pour localiser le fichier d’entrée, il utilise un "sélecteur de fichier" (exemple ci-dessous: http://docs.Oracle.com/javase/tutorial/uiswing/components/filechooser.html )

  2. J'ai débogué tout le code et, à l'aide du débogueur, ça marche.

  3. J'ai couru le code (la classe principale, qui appelle tous les autres en séquence) et ça marche, dans Eclipse.

  4. J'ai exporté tout le contenu du projet dans un fichier "jar exécutable".

Notez que, à part le sélecteur de fichier, il s’agit principalement d’un "lot" qui lit et écrit: pratiquement aucune interface utilisateur. Alors que j'étais dans Eclipse, j’ai montré des résultats internes en utilisant quelque chose comme "if (debug) System.out.print (" quelque chose à imprimer ");" fournissant à définir "debug" TRUE lors du débogage et FALSE en en environnement de production.

Tout ce qui précède travaillé!

Maintenant, en démarrant le fichier jar exécutable (double-cliquez sur le fichier jar, sous Win/XP), je vois le sélecteur de fichier et je peux l’utiliser mais, après avoir choisi le fichier d’entrée ... rien de plus: (n'ayant pas d'interface utilisateur) Je ne sais pas si le fichier a été lu, je ne vois aucun fichier de sortie généré, et je n'ai même pas de "console" pour répertorier un message de débogage intermédiaire, pour voir si le jar fonctionne, même si je le réexporte avec la variable de débogage définie sur TRUE.

Existe-t-il un moyen de "déboguer à l'exécution" le jar en cours d'exécution (comme MsgBox de VB ou autre)? une sorte de "fichier journal" que je peux "activer" ou examiner? (Évidemment, comme mon jarre n'écrit pas le fichier de résultat, je ne peux pas essayer d'écrire un fichier * .log aussi). Je dois également dire que je ne peux installer que sur Eclipse sur ma machine (et que je n'ai que de la chance qu'il ait fonctionné), donc pas d'outils de développement, d'utilitaires et autres choses utiles.

33
eewing

Même s'il s'agit d'un fichier jar exécutable, vous pouvez toujours l'exécuter à partir d'une console: ouvrez une fenêtre de terminal, accédez au répertoire contenant le fichier jar et entrez "Java -jar votreJar.jar". Il s'exécutera dans cette fenêtre de terminal et sysout ainsi que la sortie syserr y apparaîtront, y compris les traces de pile d'exceptions non interceptées. Assurez-vous que votre débogage est défini sur true lorsque vous compilez. Et bonne chance.


Je viens de penser à autre chose - si vous utilisez Win7, il y a souvent des problèmes d’autorisation avec les applications utilisateur qui écrivent des fichiers dans des répertoires spécifiques. Assurez-vous que le répertoire dans lequel vous écrivez votre fichier de sortie est un répertoire pour lequel vous disposez d'autorisations.

Dans un futur projet, s'il est suffisamment grand, vous pouvez utiliser l'une des fonctions de journalisation standard pour la sortie «débogage»; alors il sera facile (ier) de le rediriger vers un fichier au lieu de compter sur une console. Mais pour un travail plus petit comme celui-ci, cela devrait aller.

14
arcy

http://www.eclipsezone.com/Eclipse/forums/t53459.html

En gros, lancez-le avec:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044

L'application, au lancement, attendra jusqu'à ce que vous vous connectiez à partir d'une autre source.

80
RamonBoza

Vous pouvez activer la fonction de débogage de la machine virtuelle Java au démarrage de la commande Java avec une option spéciale:

Java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar

Lancer jar.jar comme ça sur la ligne de commande:

  • put this instance JVM dans le rôle d'un serveur (server=y) à l'écoute sur le port 8000 (address=8000)
  • écrivez Listening for transport dt_socket at address: 8000 dans stdout et
  • puis mettez l’application en pause (suspend=y) jusqu’à ce que le débogueur se connecte. Le débogueur agit en tant que client dans ce scénario.

Les options courantes pour sélectionner un débogueur sont les suivantes:

  • Eclipse Debugger: Sous Exécuter -> Configurations de débogage ... -> sélectionnez Application Java distante -> cliquez sur le bouton Nouvelle configuration de lancement . Indiquez un Nom arbitraire pour cette configuration de débogage, Type de connexion: Standard (Socket Attach) et comme Propriétés de connexion les entrées Hôte: localhost , Port: 8000 . Apply the Changes et cliquez sur Debug . Au moment où le débogueur Eclipse s'est connecté avec succès à la machine virtuelle Java, l'exécution de jar.jar devrait commencer.
  • Outil de ligne de commande jdb : Démarrez-le avec jdb -connect com.Sun.jdi.SocketAttach:port=8000
37
Abdull

Avec IntelliJ IDEA vous pouvez créer une configuration d'exécution Jar Application, sélectionnez la JAR, les sources, la JRE pour exécuter la Jar avec et démarrer le débogage. Ici est la documentation.

1
BullyWiiPlaza