Pourquoi mon projet Eclipse a-t-il des points d'arrêt phantom debugger?

j'ai un petit projet qui, lorsqu'il est exécuté dans le débogueur Eclipse, semble toujours s'arrêter dans FileInputStream.Classe ligne 106, où les dossiers sont ouverts. Il n'y a pas de point de rupture défini, mais Eclipse se comporte exactement comme si j'avais un point de rupture ici. Si je nettoie tous les points de rupture, ça arrive quand même.

j'ai un deuxième projet beaucoup plus grand dans le même espace de travail Eclipse qui ne souffre pas de ce problème.

je viens de déplacer le plus petit projet de mon ancienne machine Linux, où je l'ai développée dans Europa Eclipse et avait ce problème, sur ma nouvelle machine Windows, où je continue à voir le problème dans Ganymede Eclipse. Le problème persiste dans tous les systèmes d'exploitation et dans toutes les versions D'Eclipse, mais apparemment pas dans tous les projets. Je ne comprends pas! J'ai passé en revue tous les fichiers du répertoire de ce projet et je n'ai rien trouvé qui pourrait être un fichier demandant à Eclipse de s'arrêter dans FileInputStream.

Informations complémentaires : le point de rupture apparent n'est en fait pas pour la ligne 106 de FileInputStream; il semble être un point de rupture D'Exception pour FileNotFoundException, être lancé à partir de code natif appelé à partir de cette ligne dans FileInputStream. Mais encore une fois, je ne semble pas avoir de points d'arrêt définis. Les seuils D'Exception sont-ils définis ailleurs?

69
demandé sur skiphoppy 2009-04-07 00:57:50

5 réponses

avez - vous essayé de désélectionner

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions

? ( mentionné dans ce fil , par exemple)

alt text

pourquoi Eclipse fonctionne-t-il de cette façon?

Il remonte à 2002 , lorsque le point d'arrêt de la hiérarchie objet a été dépouillé.

pour fixer un point de rupture, avec l'ancienne API, un client avait besoin D'objets Java Model-tels que IType , IField , etc.

Avec la nouvelle API, Tout ce qui est requis par le modèle de débogage est les noms de type, les noms de champ, etc.

cela permet aux clients de définir des points de rupture lorsque les objets Java Model ne sont pas disponibles.

Les Clients spécifient maintenant la ressource avec laquelle associer un point de rupture (avant que nous ne l'ayons limité au Modèle Java associé). ressources.)

les points de rupture peuvent maintenant aussi être "cachés" . C'est qu'ils n'ont pas besoin d'être enregistrée avec le gestionnaire de points d'arrêt.

Les seuils peuvent aussi être maintenus de façon sélective (les marqueurs n'ont permis que la persistance de tous les marqueurs ou d'aucun marqueur).

Cela rend le modèle de débogage plus flexible, et donne aux clients plus d'éléments constitutifs.

cela a également simplifié une partie de notre Java debug implementation-par exemple, la fonctionnalité " suspend on any uncaught exception ", définit simplement un point de rupture pour le type nommé " java.lang.Throwable ", plutôt qu'un spécifique IType dans un projet spécifique .

le point de rupture n'est pas enregistré auprès du gestionnaire du point de rupture (i.e. hidden ) - il n'est connu et utilisé que par un client .

Un autre exemple est le " run to line breakpoint ". Le IJavaRunToLineBreakpoint a été supprimé, car sa fonctionnalité spéciale n'est plus nécessaire. Maintenant, L'interface de débogage Java crée simplement un" point de rupture de ligne " qui est caché, non a persisté, et a un nombre de hits de 1. Il s'agit d'un exemple de prestation de composantes de base aux clients.

110
répondu VonC 2013-01-23 13:43:10

j'ai eu un problème similaire mais la solution acceptée n'a pas fonctionné pour moi. Je fais le développement D'Eclipse Android et avait mis quelques points de rupture et plus tard les désactiver. Même si je les ai désactivés, Eclipse arrêtait l'exécution à ces points de rupture fantômes. La solution pour moi était d'ouvrir la fenêtre des points de rupture:

Fenêtre > Afficher La Vue > Autre...

Debug > Points D'Arrêt

, Puis cliquez sur un point d'arrêt et sélectionnez "Supprimer Tout"

malheureusement, vous devez réinitialiser tous vos points de rupture valides, mais cela a fonctionné pour moi et a empêché beaucoup d'angoisse et de frustration aller de l'avant.

Quelques photos pour guider les autres:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

34
répondu Mark Scheel 2012-10-03 22:39:48

Pour ceux qui ne trouvent pas d'autres solutions utiles, j'ai trouvé ma solution personnelle à mon problème. Je travail avec un .jar bibliothèque qui est générée par la construction d'un autre projet dans l'espace de travail. Si je mets un point de rupture dans un .java dans le projet de bibliothèque, alors le point de rupture sera déclenché lors du débogage du projet final. Cependant, lorsque le débogueur interrompt l'exécution le .le fichier de classe est montré qui a ses propres points de rupture et donc le point de rupture réglé dans le .fichier java n'est pas montrée ici!

Solution: Afin de supprimer le point d'arrêt, vous devez supprimer le point d'arrêt dans le .fichier java, dans le projet de bibliothèque.

5
répondu HAL9000 2013-12-28 21:35:08

j'ai rencontré un problème où un fichier source avait des marqueurs persistants pour les points de rupture qui n'existaient pas. J'ai essayé de nettoyer le projet, faire une construction complète, redémarrer Eclipse - rien n'a fonctionné.

j'ai fouillé dans les métadonnées D'Eclipse, et j'ai trouvé les projets .les marqueurs de fichier. La suppression de ce fichier a finalement réglé le problème.

pour toute autre personne ayant ce problème, ouvrez votre répertoire espace de travail, puis naviguez vers .métadonnées./plugins / org.Eclipse.core.ressources./projets / votre projet, puis renommer / supprimer le fichier .marqueur.

par exemple, si votre dossier workspace est ~/workspace, et que votre projet S'appelle Foo, vous pouvez faire:

$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers
1
répondu javagrendel 2017-12-06 23:39:10

pour ceux qui n'ont pas trouvé de solution à partir des réponses précédentes, ils peuvent essayer ce qui a résolu mon problème. C'est, je pense, semblable à HAL9000 problème/solution

Si vous avez deux classes portant le même nom (deux projets), les points d'arrêt sur la personne, s'appliquent sur l'autre. Les deux apparaissent dans la fenêtre "Breakpoints".

Solution : si vous supprimez le point de rupture de la classe - avec le même nom - que vous ne l'utilisiez pas supprime le point de rupture de la classe que vous déboguez.

0
répondu Christopher 2014-12-13 01:09:17