Je reçois une NullPointerException dans une classe à partir d'une bibliothèque tierce. Maintenant, je voudrais déboguer le tout et j'aurais besoin de savoir à partir de quel objet la classe est tenue. Mais il me semble que je ne peux pas définir un point d'arrêt dans une classe à partir d'un tiers.
Quelqu'un sait-il un moyen de sortir de mes ennuis? Bien sûr, j'utilise Eclipse comme mon IDE.
Mise à jour: la bibliothèque est open-source.
La façon la plus sûre de le faire (et de se retrouver avec quelque chose qui est réellement utile) est de télécharger la source (vous dites qu'elle est open-source) et de configurer un autre "projet Java" pointant vers cette source.
Pour ce faire, téléchargez et décompressez la source quelque part sur votre système. Cliquez sur "Fichier" -> "Nouveau" -> "Projet Java". Dans la boîte de dialogue suivante, donnez-lui un nom de projet et sélectionnez "Créer un projet à partir d'une source existante". Accédez à l'emplacement racine de la bibliothèque open source.
En supposant que toutes les bibliothèques supplémentaires requises par le projet et celles-ci soient incluses dans le projet que vous avez téléchargé, Eclipse va tout comprendre et définir le chemin de génération pour vous.
Vous devrez supprimer le bocal open source du chemin de génération de votre projet et ajouter ce nouveau projet au chemin de génération de votre projet.
Maintenant, vous pouvez simplement le traiter comme votre code et le déboguer à volonté.
Cela permet de contourner au moins quelques problèmes avec d'autres approches:
Vous pouvez "attacher la source" au fichier jar, mais si le fichier jar a été compilé sans informations de débogage, cela ne fonctionnera toujours pas. Si le fichier jar a été compilé avec des informations de débogage (lines,source,vars
... voir http://Java.Sun.com/j2se/1.3/docs/tooldocs/win32/javac.html et le -g
option).
Vous pouvez ajouter un "point d'arrêt d'exception" pour voir quand le NullPointerException est levé, mais c'est une exception courante, et peut très bien être levé et traité plusieurs (centaines de?) Fois avant celui que vous recherchez. De plus, sans la source d'origine, vous ne pourrez pas vraiment voir grand-chose sur le code qui déclenche l'exception NullPointerException - la probabilité que vous puissiez comprendre ce qui ne va pas est assez faible.
Vous pouvez facilement définir des points d'arrêt de méthode dans des bibliothèques tierces sans avoir la source. Ouvrez simplement la classe (vous obtiendrez la vue "i-have-no-source"). Ouvrez le contour, faites un clic droit sur la méthode souhaitée et cliquez sur Toggle Method Breakpoint
pour créer le point d'arrêt de la méthode.
Vous pouvez également définir des points d'arrêt sur des exceptions spécifiques. Du point de vue du débogage, il y a un bouton "Ajouter Java Point d'arrêt d'exception", et là vous pouvez ajouter "NullPointerException". Votre débogueur suspendra alors l'exécution dès qu'une telle exception sera levée.
Attachez simplement la source (ou utilisez quelque chose qui attache automatiquement le pot source), puis définissez un point d'arrêt de la manière habituelle, en double-cliquant à gauche de la ligne d'intérêt.
Pour que cela fonctionne avec une application web matérialisée maven, j'ai dû faire trois choses.
1) Créez un nouveau projet Eclipse avec le code source du pot tiers.
2) Supprimez la référence au pot des dépendances pom.xml.
3) Ajoutez le nouveau projet Eclipse à l'assemblage de déploiement dans les propriétés du projet.
4) Ajoutez le nouveau projet Eclipse aux propriétés du projet -> Java Build Path -> Projets du projet existant qui fait référence au projet tiers.
Si le 3e projet a été ajouté correctement à votre référentiel maven, avec les sources, maven téléchargera automatiquement le code source approprié et vous permettra d'ajouter des points d'arrêt sans avoir à effectuer l'une des étapes ci-dessus; cependant, j'ai appris que vous ne pouvez pas toujours compter sur cela.
Normalement, vous devriez pouvoir définir un point d'arrêt. Surtout si la bibliothèque tierce est open source. Mais si votre bibliothèque tierce provient d'un fournisseur commercial, ils peuvent avoir compilé la source avec l'indicateur de débogage désactivé. Cela vous empêchera de le déboguer. Votre fournisseur a peut-être fait cela dans le cadre d'un processus d'obscurcissement pour rendre impossible l'ingénierie inverse de la bibliothèque, ou tout simplement parce que les classes compilées finales seront plus petites.