web-dev-qa-db-fra.com

Débogage Eclipse "source introuvable"

Je viens juste de commencer à utiliser Eclipse, alors allez-y doucement;). Mais lorsque j'essaie de déboguer un scénario de test JUnit, un dialogue indiquant que la source n'est pas trouvée lorsque je parviens à cette ligne dans le code de ma méthode de test s'affiche:

Assert.assertEquals(1, contents.size());

Je sais que je devrais probablement essayer d’essayer de télécharger le code source quelque part, mais je ne le souhaite vraiment pas car je n’ai aucun intérêt à entrer dans le code JUnit. J'ai le fichier d'exécution JUnit alors pourquoi Eclipse s'attend-il à ce que je dispose de tout le code source des outils référencés afin de déboguer mon propre code (semble quelque peu idiot)? 

Ma question principale est cependant, comment puis-je demander à Eclipse de sauter cette boîte de dialogue lorsque le source n'est pas disponible et de me permettre de continuer à déboguer mon propre code? 

[Modifier]

J'ai isolé la cause de cela. Il semble qu'Eclipse semble penser qu'il a besoin de la source lorsqu'une exception est générée par le code interne JUnit. En général, y a-t-il un moyen de dire que ce n'est pas le cas et de simplement lancer un dialogue d'erreur quelconque?

20
James

J'ai eu ce problème très ennuyeux pendant une longue période, mais j'ai finalement réussi à le résoudre. Dans mon cas, une exception de pointeur null était émise quelque part dans la fonction Transformer.IsRuntimeCode (ProtectionDomain) de Java.

Je n'avais pas vraiment besoin de savoir cela car l'exception était capturée et traitée, mais Eclipse mettait en pause le débogage à chaque fois que cela se produisait et me disait que la source n'était pas disponible. En conséquence, je devais constamment appuyer sur le bouton pour continuer l'exécution du code.

Afin d'éviter cela, je:

  1. Cliqué sur la fenêtre "Points de rupture" .__ au bas de l'écran de débogage
  2. Clic droit sur "NullPointerException"
  3. Décoché "attrapé"

Cela empêchait le débogueur de suspendre le flux du programme lors d'une exception NullPointerException interceptée.

alt text http://www.SharpDetail.com/p/so_breakpoint.gif

20
Chris Dutrow

La pile d'appels de débogage affichera une ligne de code source JUnit lors du lancement d'une exception.
Mais vous ne devriez pas avoir à vous soucier de ça si vous n'avez pas le code source de JUnit.

Si vous revenez en arrière d'une ligne dans la pile d'appels, vous devriez voir la ligne (de votre code source) qui a provoqué l'exception JUnit.
Cela devrait suffire à déboguer votre code.


Pour associer la source à JUnit, vous pouvez ajouter le junit.jar dans les librairies de votre projet et associer le junit-x.y.z-src.jar au junit-x.y.z.jar, comme si :

http://web.archive.org/web/20130227201940/http://img241.i_mageshack.us/img241/1412/eclipsejunitsrc.png

Cela générera dans le .classpath de votre projet une ligne comme celle-ci:

<classpathentry kind="lib" path="junit-x.y.z.jar" sourcepath="junit-x.y.z-src.jar">

Remarque: en réalité, il y aurait le chemin complet des fichiers junit[...].jar dans cette ligne classpathentry. Mais vous pouvez également utiliser ressources liées pour éviter cette valeur fixe (le chemin complet) dans votre fichier .classpath.

10
VonC

J'avais un problème similaire. Je l'ai corrigé en faisant un clic droit sur le dossier du projet dans l'explorateur de paquet et en sélectionnant Actualiser. La source de code n'était pas synchronisée avec le débogueur et cela a été corrigé. Le message Transformer.IsRuntimeCode (ProtectionDomain) Source introuvable ne s'affiche plus.

2
user1370258

Utilisez le filtre pas à pas pour éviter de parcourir les packages ... junit .... Cliquez avec le bouton droit sur la trace de la pile et choisissez Filtre. Vous devrez peut-être d'abord activer le filtrage avec Utiliser les filtres par étapes. ~~~

1
Steve Pitchers

Calculez contents.size () sur une ligne distincte à la place ou définissez un point d'arrêt sur la méthode. 

Notez également que la vue Junit dans Eclipse vous permet de parcourir la trace de la pile.

1

J'ai eu un problème similaire avec un autre pot, même si je montrais la source, il le demanderait à nouveau. J'ai été capable de le résoudre en compilant le bocal avec debug="on" sur ANT.

0
Mashimom