Podczas próby ustawienia punktu przerwania pojawia się ten dziwny błąd w środowisku Eclipse.
Unable to insert breakpoint Absent Line Number Information
Zaznaczyłem pole wyboru w opcjach kompilatora, ale bez powodzenia.
eclipse
debugging
breakpoints
chandrajeet
źródło
źródło
Odpowiedzi:
Miałem ten sam komunikat o błędzie w Eclipse 3.4.1, SUN JVM1.6.0_07 podłączony do Tomcat 6.0 (działający w trybie debugowania na innym komputerze, Sun JVM1.6.0_16, połączenie debugowania działało poprawnie).
Okno -> Preferencje -> Java -> Kompilator -> Generowanie pliku klas: zaznaczono „dodaj atrybuty numeru linii do wygenerowanego pliku klasy” . Zrobiłem czysty, ponownie skompilowałem. Usunąłem zaznaczenie, ponownie skompilowałem, sprawdziłem, ponownie skompilowałem. Upewniłem się, że projekt korzysta z ustawień globalnych. Wciąż ta sama wiadomość.
Za pomocą przełączyłem się na kompilację mrówek
Wciąż ta sama wiadomość.
Nie dowiedziałem się, co spowodowało ten komunikat i dlaczego nie zniknie. Chociaż wydawało się, że ma to coś wspólnego z uruchomioną sesją debugowania Tomcat: po rozłączeniu rekompilacja rozwiązuje problem. Ale po podłączeniu debugera do Tomcat lub ustawieniu nowych punktów przerwania podczas połączonej sesji debugowania pojawił się ponownie.
Okazało się jednak, że komunikat był niepoprawny : rzeczywiście byłem w stanie debugować i ustawiać punkty przerwania, zarówno przed debugowaniem, jak i podczas debugowania ( javap -l również pokazywał numery linii). Więc zignoruj to :)
źródło
debug="true"
dojavac
zadaniaant
skryptu kompilacji działało.źródło
To naprawiło mój problem:
źródło
Installed JREs
domyślnie jestJDK
zamiastJRE
W przypadku problemów związanych z wiosną należy wziąć pod uwagę, że w niektórych przypadkach generuje klasy „bez numerów linii”; na przykład
@Service
klasa z adnotacjami bez interfejsu, dodaj interfejs i możesz debugować. zobacz tutaj pełny przykład.Powyższa usługa będzie miała interfejs generowany przez wiosnę powodujący „brakujące numery linii”. Dodanie prawdziwego interfejsu rozwiązuje problem z generowaniem:
źródło
Mam odpowiedź na ten problem od strony BlackBerry SDK rzeczy: Z jakiegoś powodu, bez względu na to, ile razy zmieniałem opcje w kompilatorze, rzeczywisty plik ustawień podstawowych nie zmienił się.
Zajrzyj do folderu .settings swojego projektu, aby zobaczyć plik o nazwie org.eclipse.jdt.core.prefs .
Tam możesz ręcznie zmodyfikować ustawienia:
edytuj: Ponadto zauważyłem, że czasami mogę zignorować ostrzeżenie, które daje Eclipse, i nadal zatrzyma się w wymaganym miejscu ... kurier i kurator ... Wrzucam to do koszyka rzeczy, z którymi uczymy się radzić sobie podczas pracy jako programista
źródło
To działało dla mnie:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
wszystkie opcje muszą byćTrue
.debug="true"
w<javac>
zadaniu build.xml .Debug
trybieźródło
Nie wiem, czy to nadal jest istotne, być może inny żeglarz uzna to za przydatne.
Komunikat pojawia się, gdy skompilowano plik klasy, flagi debugowania są wyłączone.
W Eclipse możesz włączyć tę funkcję, korzystając z wyżej wymienionych opcji,
Okno -> Preferencje -> Java -> Kompilator -> Generowanie pliku klas: „dodaj atrybuty numeru linii do wygenerowanego pliku klasy”
Ale jeśli masz plik jar, otrzymasz skompilowane dane wyjściowe. Nie ma łatwego sposobu na rozwiązanie tego problemu.
Jeśli masz dostęp do źródła i używasz mrówki, aby uzyskać plik jar, możesz zmodyfikować zadanie mrówki w następujący sposób.
Miłego debugowania ...
ref: http://doc.sumy.ua/prog/Java/javanut/ch16_04.htm
źródło
Próbowałem tutaj prawie każdego rozwiązania i bez powodzenia. Czy próbowałeś kliknąć „Nie mów mi więcej”? Po tym zrestartowałem program i wszystko poszło dobrze. Zaćmienie uderzyło w mój punkt przerwania, jakby nic się nie stało.
Główną przyczyną dla mnie było to, że Eclipse próbował skonfigurować debugowanie dla automatycznie generowanych obiektów proxy CGLIB Spring. O ile nie musisz debugować czegoś na tym poziomie, zignoruj problem.
źródło
Byłoby pomocne, gdybyś wskazał używaną wersję zaćmienia i technologię (Java JDT lub AJDT dla Aspect Java lub C ++ CDT), dla pewności.
Po stronie Java, przypuszczam, że odnosi się do tego „Zaznaczone pole wyboru z opcji kompilatora”
W obszarze „
Window --> Preferences --> Java --> Compiler --> Classfile Generation
” wszystkieClass file
opcje generowania są ustawione na True:Czy twój projekt ma sprawdzane tylko na poziomie globalnym (Preferencje systemu Windows) czy na poziomie konkretnego projektu?
I czy jesteś pewien, że klasa się otworzyła (na której próbujesz ustawić punkt przerwania):
.java
nie.class
?Spróbuj wyczyścić wszystko i odbudować wszystko, sprawdź potencjalne konflikty słoików .
źródło
Miałem ten problem podczas próby uruchomienia Tomcata w trybie debugowania z Eclipse. Miałem plik kompilacji ANT zajmujący się kompilacją i wdrażaniem. Po ustawieniu flagi debugowania na wartość true (jak wspomniano w innych odpowiedziach) i ponownym wdrożeniu aplikacji działała poprawnie:
UWAGA: jeśli właśnie dodałeś flagę debugowania i dokonałeś ponownej kompilacji, nadal musisz ponownie wdrożyć aplikację na serwerze, ponieważ w tym miejscu Eclipse debuguje pliki klas. To bardzo oczywiste, ale łatwo spędzić godzinę, drapiąc się w głowę i zastanawiając się, dlaczego to nie działa (zaufaj mi).
źródło
spróbuj zmienić
jre
używany. Ustaw zamiast tegojre
w folderzeJDK
.źródło
Ponieważ mam zainstalowanych 6 różnych wersji Java, musiałem zmienić domyślną zgodność JDK, aby była zgodna z wersją Java, której chciałem używać. Domyślnie Eclipse miał ustawiony poziom zgodności kompilatora na Java 1.7, gdy wszystko zostało zbudowane / skompilowane przy użyciu Java 1.6.
Więc wszystko co zrobiłem było
Teraz Eclipse nie narzeka już na „Nie można wstawić punktu przerwania Brak informacji o numerze linii”, a punkty przerwania debugowania faktycznie działają !!!
źródło
Jeśli nic innego nie działa, otwórz perspektywę debugowania, wyczyść wszystkie istniejące punkty przerwania, a następnie ustaw je ponownie.
źródło
Wyjaśnia to szczegółowo tutaj:
https://github.com/spring-projects/spring-ide/issues/78
Tylko na przyszłość, jest to odpowiednia część odpowiedzi (zignoruj fakt, że odnosi się do aplikacji Spring Boot, zachowanie jest takie samo w wielu innych przypadkach):
źródło
Moja sytuacja była podobna:
spyTask = spy(new Task())
Task.java
)Ten punkt przerwania generuje dany błąd przy każdym uruchomieniu
Debug As... > JUnit Test
Aby rozwiązać problem, przeniosłem punkt przerwania „w górę” do właściwego testu (wewnątrz TaskTest.java). Po zakończeniu wykonywania dodałem punkt przerwania z powrotem tam, gdzie go miałem, pierwotnie (wewnątrz Task.java).
Nadal dostaję ten sam błąd, ale po kliknięciu „OK” punkt przerwania zadziałał dobrze.
Mam nadzieję, że komuś pomoże
-gomale
źródło
Miałem ten sam problem, kiedy robiłem na serwerze jetty i kompilowałem nowy plik .war przez ANT. Powinieneś stworzyć tę samą wersję kompilatora jdk / jre i ścieżkę kompilacji (na przykład jdk 1.6v33, jdk 1.7, ....) po ustawieniu kompilatora Java tak, jak napisano wcześniej.
Zrobiłem wszystko i nadal nie działa. Rozwiązaniem było usunięcie skompilowanych plików .class i celu wygenerowanego pliku wojny, a teraz działa :)
źródło
Dostałem ten komunikat z Spring AOP (wydaje się, że pochodzi z biblioteki CGLIB). Kliknięcie opcji Ignoruj wydaje się działać poprawnie, nadal mogę debugować.
źródło
Znalazłem kolejny powód tej wiadomości. Programowałem Scalę. Rozwiązaniem było:
Teraz debugowanie powinno działać. Zauważ, że zainstalowałem wtyczkę Scala IDE, ta opcja może być niedostępna, jeśli jej nie masz.
źródło
Przede wszystkim nie działało dla mnie. Poniższe rozwiązania w końcu zadziałały. Konfiguracje debugowania -> Ścieżka klasy -> Wpisy użytkownika -> (Dodaj folder src projektu, który chcesz debugować.)
źródło
Miałem ten sam problem podczas debugowania WAR (zbudowanej z wielu artefaktów projektu Eclipse) wdrożonej w Tomcat.
Buduję wszystko za pomocą skryptu kompilacji ANT. Jeśli to właśnie robisz, upewnij się, że flaga debug = true jest ustawiona dla każdego zadania javac ant. To był mój jedyny problem - mam nadzieję, że to pomoże w twoim problemie!
źródło
Miałem ten sam błąd z JBoss 7.1. I zrobiłem to samo co Zefiro. Zignorowałem błąd i udało mi się normalnie ustawić punkty przerwania. W moim przypadku budowałem narzędzie do budowania mrówek i oto moje zadanie javac:
źródło
Mam ten sam problem, spędziłem dużo czasu na szukaniu rozwiązania, ale te rozwiązania są bezużyteczne, więc sam studiuję wszystkie przypadki, w końcu znalazłem problem, to jest konflikt między wersjami JDK. Poniżej przedstawiono kroki rozwiązania problemu: 1. Usuń wszystkie wersje JDK i JRE, zachowaj tylko jedną wersję. 2. Ustaw system JAVA_HOME, a kompilator Java w Eclipse jest taki sam. W niektórych przypadkach powyższy błąd nie zniknie, ale będziemy mogli uruchomić model debugowania.
źródło
Gdy napotkałem ten sam błąd, gdy korzystałem z junit i Mockito, zapomniałem dodać
@PrepareForTest
dla klasy statycznej.Dodaj poniższy kod naprawił mój problem.
Nie jestem pewien, czy to był ten sam przypadek.
źródło
Mój problem polegał na tym, że miałem 2 pliki JAR i próbowałem zastąpić jeden z drugim na podstawie jego kolejności w
Java Build Path => Order & Export
zakładce w Eclipse, ponieważ jeden był do debugowania, a drugi nie (pierwszy plik JAR debugowania był w kolejności). Kiedy zrobiłem to w ten sposób, musiałem ręcznie dołączyć źródło.Próbowałem usunąć plik JAR niebędący debugowaniem i umieścić plik JAR debugowania w moim katalogu \ WEB-INF \ lib \, czyszczeniu, budowaniu itp. I działało. Tym razem (po usunięciu dołączonego źródła) automatycznie pozwoli mi to poruszać się po kodzie debugowania, bez konieczności ręcznego dołączania dowolnego źródła. Działa również Breakpoints i debugowanie.
W przypadku, gdy ktoś nadal ma problemy, wypróbowałem również wszystkie te rozwiązania wymienione w innych odpowiedziach:
Add line number attributes...
org.eclipse.jdt.core.prefs
jak wspomniano w innej odpowiedzi: https://stackoverflow.com/a/31588700/1599699Zrobiłem także zwykłe zamykanie serwera (i upewnienie się, że java.exe jest faktycznie zamknięty ...), usuwając katalogi \ build \ w obu projektach, ponownie uruchamiając Eclipse z parametrem -clean, odtwarzając JAR debugowania, odświeżając, czyszczenie i budowanie projektu przy użyciu pliku JAR debugowania, uruchamianie serwera w trybie debugowania, publikowanie / czyszczenie i przerywanie.
źródło
Zrobiłem wszystkie powyższe elementy podczas kompilacji / budowania słoików - wciąż miałem ten sam problem.
Ostatecznie zmiany jvmarg wymienione poniżej podczas uruchamiania serwera są tym, co w końcu działało dla mnie:
1) Usunąłem / skomentowałem kilka argumentów JVM dotyczących javaagent i bootclasspath.
2) Włączono / skomentowano następujący wiersz:
Potem, kiedy uruchamiam serwer, jestem w stanie trafić moje punkty przerwania. Podejrzewam, że javaagent w jakiś sposób zakłócał zdolność Eclipse do wykrywania numerów linii.
źródło
Sprawdź / wykonaj następujące czynności:
1) W „Oknie -> Preferencje -> Java -> Kompilator -> Generowanie pliku klas” wszystkie opcje muszą być zgodne z prawdą:
2) W folderze .settings swojego projektu poszukaj pliku o nazwie org.eclipse.jdt.core.prefs. Sprawdź lub ustaw org.eclipse.jdt.core.compiler.debug.lineNumber = generuj
3) Jeśli nadal pojawia się okno błędu, kliknij pole wyboru, aby nie wyświetlać komunikatu o błędzie.
4) Oczyść i zbuduj projekt. Rozpocznij debugowanie.
Zwykle okno błędu nie jest już wyświetlane, a informacje debugowania są wyświetlane poprawnie.
źródło
Wpadłem również na ten problem. Korzystam ze skryptu budowania mrówek. Pracuję nad starszą aplikacją, więc używam jdk w wersji 1.4.2. Kiedyś to działało, więc zacząłem się rozglądać. Zauważyłem, że w konfiguracji debugowania na karcie JRE wersja Java została ustawiona na 1.7. Po zmianie z powrotem na 1.4 działało.
Mam nadzieję, że to pomoże.
źródło
Próbowałem debugować menedżera rejestrowania i musiałem zmienić JRE na JDK, a następnie wybrać JDK na karcie „Main”, „Java Runtime Environment” | „środowisko uruchomieniowe JRE” konfiguracji debugowania było wtedy w porządku.
źródło
Widziałem ten problem, kiedy adnotowałem klasę za pomocą @ManagedBean (javax.annotation.ManagedBean). Komunikat ostrzegawczy pojawił się podczas uruchamiania nowo zgodnej aplikacji w JBoss EAP 6.2.0. Zignorowanie go i uruchomienie mimo wszystko nie pomogło - nigdy nie osiągnięto punktu przerwania.
Dzwoniłem do tej fasoli za pomocą EL na stronie JSF. Teraz ... możliwe, że @ManagedBean nie nadaje się do tego (jestem nowy w CDI). Kiedy zmieniłem adnotację na @Model, moja fasola została wykonana, ale ostrzeżenie o punkcie przerwania również zniknęło i osiągnąłem punkt przerwania zgodnie z oczekiwaniami.
Podsumowując, z pewnością wyglądało to tak, jakby adnotacja @ManagedBean pomieszała numery wierszy, niezależnie od tego, czy użyto niewłaściwej adnotacji.
źródło
Upewnij się, że projekt, w którym znajduje się główna klasa środowiska wykonawczego, jest tym samym projektem, w którym znajduje się klasa, w której znajdują się punkty przerwania . Jeśli nie, upewnij się, że oba projekty znajdują się w ścieżce klas konfiguracji uruchamiania i pojawiają się przed wszelkimi słoikami i folderami klas.
źródło