J'obtiens cette étrange erreur dans Eclipse lorsque j'essaie de définir un point d'arrêt.
Unable to insert breakpoint Absent Line Number Information
J'ai coché la case des options du compilateur, mais sans succès.
J'obtiens cette étrange erreur dans Eclipse lorsque j'essaie de définir un point d'arrêt.
Unable to insert breakpoint Absent Line Number Information
J'ai coché la case des options du compilateur, mais sans succès.
J'ai essayé presque toutes les solutions proposées ici, mais sans succès. Avez-vous essayé de cliquer sur "Ne me dites plus rien" ? Après avoir fait cela, j'ai redémarré mon programme et tout allait bien. Eclipse a atteint mon point d'arrêt comme si de rien n'était.
La cause première pour moi était qu'Eclipse essayait de configurer le débogage pour les objets proxy Spring CGLIB générés automatiquement. À moins que vous n'ayez besoin de déboguer quelque chose à ce niveau, vous devriez ignorer ce problème.
Ceci est expliqué en détail ici :
https://github.com/spring-projects/spring-ide/issues/78
Pour référence, voici la partie pertinente de la réponse (ignorez le fait que cela se réfère à une application Spring Boot, le comportement est le même dans beaucoup d'autres cas) :
Chaque fois que vous définissez un point d'arrêt dans Eclipse/STS, l'IDE essaie de définir le point d'arrêt dans la VM si vous lancez une application. C'est ce qui se passe dans votre cas lorsque vous exécutez l'application de démarrage en mode débogage.
Pour chaque classe qui est chargée dans la JVM, l'IDE vérifie s'il doit définir un point d'arrêt ou non. S'il décide de le faire, il essaie de le faire (en utilisant les informations de la définition du point d'arrêt dans l'IDE, y compris son numéro de ligne, puisque vous définissez généralement des points d'arrêt de ligne sur un fichier source à une ligne donnée).
Cette décision (définir ou non le point d'arrêt sur une classe chargée donnée) vérifie les types sur lesquels vous définissez le point d'arrêt, les types environnants et les classes internes. Cela permet de s'assurer que les points d'arrêt pour les classes internes (même les classes internes anonymes) sont définis pour la JVM (et ne sont pas ignorés).
Spring Boot génère une classe interne pour votre contrôleur au moment de l'exécution (il s'agit de la classe interne générée par CGLIB qui apparaît dans le message d'erreur). Lorsque la JVM charge cette classe, elle tente de définir le point d'arrêt du numéro de ligne du type englobant (pour cette classe interne). Comme la classe interne générée ne contient aucune information sur le numéro de ligne (elle n'a pas besoin d'en avoir), la définition du point d'arrêt échoue pour cette classe interne avec le message d'erreur mentionné.
Lorsque l'IDE charge le type englobant (votre classe de contrôleur elle-même), il essaie également de définir le point d'arrêt de la ligne et y parvient. Ceci est visualisé par la marque de contrôle sur le marqueur de point d'arrêt.
Vous pouvez donc ignorer le message d'erreur qui s'affiche. Pour éviter que ce message d'erreur ne s'affiche, vous pouvez aller dans les préférences (Java -> Debug) et désactiver "Warn when unable to install breakpoint due to missing line number attributes".
Je ne sais pas si cela est toujours d'actualité, peut-être qu'un autre marin trouvera cela utile.
Le message apparaît lorsqu'on a un fichier de classe compilé avec les drapeaux de débogage désactivés.
Dans Eclipse, vous pouvez l'activer en utilisant les options mentionnées ci-dessus,
Window --> Preferences --> Java --> Compiler --> Classfile Generation : "ajouter des attributs de numéro de ligne au fichier de classe généré"
Mais si vous avez un fichier jar, alors vous obtiendrez la sortie compilée. Il n'y a pas de moyen facile de résoudre ce problème.
Si vous avez accès à la source et utilisez ant pour obtenir le fichier jar, vous pouvez modifier la tâche ant comme suit.
<javac destdir="${build.destDir}" srcdir="${build.srcDir}" source="1.6" fork="true" target="${javac.target}" debug="on" debuglevel="lines,vars,source" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m" optimize="true" >
Bon débogage
Il serait utile que vous indiquiez la version d'eclipse que vous utilisez et la technologie (Java JDT, ou AJDT pour Aspect Java, ou C++ CDT par exemple), juste pour être sûr.
Du côté de Java, je suppose que votre "Cocher la case des options du compilateur" fait référence à este
Sous " Window --> Preferences --> Java --> Compiler --> Classfile Generation
", tous Class file
Les options de génération ' sont définies sur True :
Dans votre projet, ces options sont-elles cochées uniquement au niveau global (préférences Windows) ou au niveau spécifique du projet ?
Et êtes-vous sûr de l'ouverture de la classe (sur laquelle vous essayez de placer un point d'arrêt) :
.java
et non un .class
?Essayez de tout nettoyer et de tout reconstruire, vérifiez s'il n'y a pas d'erreur potentielle. conflits de jarres .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Pouvez-vous faire un javap -verbose sur le fichier de classe et coller l'information ici ? Voyez s'il y a vraiment un numéro de ligne.
3 votes
Salut yx, j'ai fait un javap sur cette classe. Il génère les numéros de ligne
0 votes
Bizarrement, je viens de rencontrer ce problème avec le plugin BlackBerry, Eclipse 3.5, rien à voir avec Tomcat. Et moi aussi, il s'arrête aux breakpoints, sauf pour l'un d'entre eux... si je trouve une réponse, je posterai.
6 votes
Pour moi, c'était une mauvaise simulation, j'ai accidentellement simulé la classe que je testais. Peut-être que quelqu'un trouve cela pertinent.
1 votes
@hipokito Pouvez-vous m'expliquer ce que signifie se moquer d'une classe et comment le défaire ? Les autres solutions ne fonctionnent pas pour moi.
0 votes
@chandrajeet - Dans mon cas, c'est un simple passage du runtime référencé de jre à jdk/jre et une reconstruction complète qui ont résolu le problème.
0 votes
Bonjour, si vous créez votre build via ant alors ajoutez debug="on" dans <target name="compile". J'ai été confronté au même problème, mais cette option debug a résolu mon problème.