Tôi nhận được lỗi lạ này trong Eclipse khi cố gắng đặt điểm dừng.
Unable to insert breakpoint Absent Line Number Information
Tôi đánh dấu vào hộp kiểm từ các tùy chọn Trình biên dịch nhưng không gặp may.
Tôi nhận được lỗi lạ này trong Eclipse khi cố gắng đặt điểm dừng.
Unable to insert breakpoint Absent Line Number Information
Tôi đánh dấu vào hộp kiểm từ các tùy chọn Trình biên dịch nhưng không gặp may.
Câu trả lời:
Tôi đã có cùng một thông báo lỗi trong Eclipse 3.4.1, SUN JVM1.6.0_07 được kết nối với Tomcat 6.0 (chạy ở chế độ gỡ lỗi trên một máy khác, Sun JVM1.6.0_16, kết nối gỡ lỗi đã hoạt động chính xác).
Cửa sổ -> Tùy chọn -> Java -> Trình biên dịch -> Tạo tệp lớp: "đã thêm thuộc tính số dòng vào tệp lớp được tạo" đã được chọn. Tôi đã làm sạch, biên dịch lại. Tôi đã bỏ chọn nó, biên dịch lại, kiểm tra nó, biên dịch lại. Tôi chắc chắn rằng dự án đã sử dụng các thiết lập toàn cầu. Vẫn là tin nhắn tương tự.
Tôi chuyển sang xây dựng kiến, sử dụng
<javac srcdir="./src/java" destdir="./bin" debug="true">
Tuy nhiên, cùng một thông điệp.
Tôi đã không tìm hiểu điều gì đã gây ra tin nhắn này và tại sao nó sẽ không biến mất. Mặc dù nó dường như có liên quan đến phiên gỡ lỗi Tomcat đang chạy: khi bị ngắt kết nối, biên dịch lại giải quyết vấn đề. Nhưng khi kết nối trình gỡ lỗi với Tomcat hoặc thiết lập các điểm dừng mới trong phiên gỡ lỗi được kết nối, nó lại xuất hiện.
Tuy nhiên, hóa ra thông báo đã sai : Tôi thực sự có thể gỡ lỗi và thiết lập các điểm dừng, cả trước và trong khi gỡ lỗi ( javap -l cũng hiển thị số dòng). Vì vậy, bỏ qua nó :)
debug="true"
vào javac
nhiệm vụ của ant
kịch bản xây dựng làm việc.
Điều này đã khắc phục vấn đề của tôi:
Installed JREs
mặc định là JDK
thay vìJRE
Đối với các vấn đề liên quan đến Spring, xem xét rằng trong một số trường hợp, nó tạo ra các lớp "không có số dòng"; ví dụ một @Service
lớp chú thích không có giao diện, thêm giao diện và bạn có thể gỡ lỗi. xem ở đây cho một ví dụ đầy đủ.
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
Dịch vụ trên sẽ có giao diện được tạo bởi lò xo gây ra "số dòng bị thiếu". Thêm một giao diện thực sự giải quyết vấn đề thế hệ:
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
Tôi có câu trả lời cho vấn đề này từ phía BlackBerry SDK về mọi thứ: Vì một số lý do, bất kể tôi đã thay đổi các tùy chọn trong trình biên dịch bao nhiêu lần, tệp cài đặt cơ bản thực tế không thay đổi.
Hãy xem thư mục .sinstall của dự án của bạn cho một tệp có tên org.eclipse.jdt.core.prefs .
Trong đó bạn có thể sửa đổi các cài đặt bằng tay:
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
chỉnh sửa: Hơn nữa, tôi đã nhận thấy rằng đôi khi tôi có thể bỏ qua cảnh báo mà Eclipse đưa ra và nó vẫn sẽ dừng ở nơi bắt buộc ... người tò mò và người tò mò ... Tôi đặt điều này vào thùng những thứ chúng ta học để đối phó khi làm việc như dev.
Điều này làm việc cho tôi:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, tất cả các tùy chọn phải được True
.debug="true"
trong <javac>
tác vụ build.xml .Debug
chế độKhông biết điều này có còn phù hợp không, có lẽ một thủy thủ khác sẽ thấy điều này hữu ích.
Thông báo xuất hiện khi một tệp có tệp lớp được biên dịch các cờ gỡ lỗi bị tắt.
Trong nhật thực, bạn có thể bật nó lên bằng các tùy chọn được đề cập ở trên,
Cửa sổ -> Tùy chọn -> Java -> Trình biên dịch -> Tạo tệp lớp: "thêm thuộc tính số dòng vào tệp lớp được tạo"
Nhưng nếu bạn có một tệp jar, thì bạn sẽ nhận được đầu ra được biên dịch. Không có cách dễ dàng để khắc phục vấn đề này.
Nếu bạn có quyền truy cập vào nguồn và sử dụng ant để lấy tệp jar, bạn có thể sửa đổi tác vụ ant như sau.
<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" >
Chúc mừng gỡ lỗi ..
Tôi đã thử hầu hết mọi giải pháp ở đây và không gặp may mắn. Bạn đã thử nhấp vào "Đừng nói với tôi một lần nữa"? Sau khi làm như vậy tôi khởi động lại chương trình của mình và tất cả đều ổn. Nhật thực đánh vào điểm dừng của tôi như thể không có gì sai.
Nguyên nhân sâu xa đối với tôi là Eclipse đã cố gắng thiết lập gỡ lỗi cho các đối tượng proxy Spring CGLIB được tạo tự động. Trừ khi bạn cần gỡ lỗi một cái gì đó ở cấp độ đó, bạn nên bỏ qua vấn đề.
Sẽ rất hữu ích nếu bạn đã chỉ ra phiên bản nhật thực mà bạn đang sử dụng và công nghệ (ví dụ Java JDT hoặc AJDT cho Aspect Java hoặc C ++ CDT), chỉ để đảm bảo.
Về phía Java, tôi cho rằng "Đã đánh dấu hộp kiểm từ các tùy chọn Trình biên dịch" đề cập đến điều này
Trong " Window --> Preferences --> Java --> Compiler --> Classfile Generation
", tất cả các Class file
tùy chọn tạo '' được đặt thành True:
Dự án của bạn có được kiểm tra chỉ ở cấp độ toàn cầu (Windows Preferences) hoặc ở cấp độ cụ thể của dự án không?
Và bạn có chắc là lớp đã mở (trên đó bạn cố gắng đặt điểm dừng):
.java
, không phải là một .class
?Cố gắng làm sạch mọi thứ và xây dựng lại tất cả, kiểm tra các xung đột jar tiềm năng .
Tôi đã gặp vấn đề này trong khi cố gắng khởi động Tomcat ở chế độ gỡ lỗi từ Eclipse. Tôi đã có một tệp xây dựng ANT chăm sóc việc biên dịch và triển khai. Sau khi đặt cờ gỡ lỗi thành true (như đã đề cập trong các câu trả lời khác) và triển khai lại ứng dụng, nó hoạt động tốt:
<javac srcdir="./src/java" destdir="./bin" debug="true">
GHI CHÚ: nếu bạn vừa thêm cờ gỡ lỗi và biên dịch lại, bạn vẫn cần phải triển khai lại ứng dụng của mình với máy chủ vì đây là nơi Eclipse đang gỡ lỗi các tệp lớp. Rất rõ ràng nhưng dễ dàng dành một giờ hoặc lâu hơn gãi đầu và tự hỏi tại sao nó không hoạt động (tin tôi).
Vì tôi đã cài đặt 6 phiên bản Java khác nhau, tôi đã phải thay đổi tuân thủ JDK mặc định của mình để phù hợp với phiên bản Java mà tôi muốn sử dụng. Theo mặc định, Eclipse có mức tuân thủ trình biên dịch được đặt thành Java 1.7 khi mọi thứ được xây dựng / biên dịch bằng Java 1.6.
Vì vậy, tất cả những gì tôi đã làm là
Bây giờ Eclipse không phàn nàn về "Không thể chèn thông tin Số dòng vắng mặt điểm dừng" nữa và các điểm dừng gỡ lỗi thực sự hoạt động !!!
Điều này được giải thích chi tiết ở đây:
https://github.com/spring-projects/spring-ide/issues/78
Chỉ để tham khảo trong tương lai, đây là phần có liên quan của câu trả lời (bỏ qua thực tế đề cập đến ứng dụng Spring Boot, hành vi tương tự đối với nhiều trường hợp khác):
Bất cứ khi nào bạn đặt điểm dừng trong Eclipse / STS, IDE sẽ cố gắng đặt điểm dừng trong VM nếu bạn khởi chạy một ứng dụng. Đó là những gì xảy ra trong trường hợp của bạn khi bạn chạy ứng dụng khởi động ở chế độ gỡ lỗi.
Đối với mỗi lớp được tải vào JVM, IDE sẽ kiểm tra xem nó có cần đặt điểm dừng hay không. Nếu nó quyết định đặt điểm dừng, thì sẽ cố gắng làm điều đó (sử dụng thông tin từ định nghĩa điểm dừng trong IDE, bao gồm số dòng của nó, vì bạn thường đặt điểm dừng dòng trên tệp nguồn tại một dòng nhất định).
Quyết định này (có đặt điểm dừng trên một lớp đã tải hay không) kiểm tra các loại mà bạn đặt điểm dừng trên, bao quanh các loại và các lớp bên trong. Điều này đảm bảo rằng các điểm dừng cho các lớp bên trong (ngay cả các lớp bên trong ẩn danh) được đặt thành JVM (và không bị bỏ qua).
Spring Boot tạo một lớp bên trong cho bộ điều khiển của bạn khi chạy (đây là lớp bên trong được tạo CGLIB xuất hiện trong thông báo lỗi). Khi JVM tải lớp đó, nó cố gắng đặt điểm dừng số dòng của loại kèm theo (đối với lớp bên trong này). Vì lớp bên trong được tạo không có bất kỳ thông tin số dòng nào (không cần phải có thông tin số dòng), nên việc đặt điểm dừng không thành công cho lớp bên trong này với thông báo lỗi được đề cập.
Khi IDE tải loại kèm theo (chính lớp trình điều khiển của bạn), nó cũng cố gắng đặt điểm dừng dòng và thành công với điều đó. Điều này được hiển thị với điểm đánh dấu trên điểm đánh dấu.
Do đó, bạn có thể yên tâm bỏ qua thông báo lỗi xuất hiện. Để tránh thông báo lỗi này xuất hiện, bạn có thể truy cập tùy chọn (Java -> Gỡ lỗi) và tắt "Cảnh báo khi không thể cài đặt điểm dừng do thiếu thuộc tính số dòng".
Tình hình của tôi cũng tương tự:
spyTask = spy(new Task())
Task.java
)Điểm dừng này tạo ra lỗi trong câu hỏi, mỗi khi tôi chạy Debug As... > JUnit Test
Để giải quyết vấn đề, tôi đã chuyển Breakpoint 'lên' vào thử nghiệm thực tế (bên trong TaskTest.java). Khi việc thực thi dừng lại, tôi đã thêm điểm dừng trở lại nơi tôi đã có nó, ban đầu (bên trong Task.java).
Tôi vẫn gặp lỗi tương tự nhưng sau khi nhấp vào "ok", điểm dừng hoạt động tốt.
Hy vọng rằng sẽ giúp được ai đó,
-male
Tôi gặp vấn đề tương tự khi tôi thực hiện trên máy chủ cầu cảng và biên dịch tệp .war mới của ANT. Bạn nên tạo cùng một phiên bản của trình biên dịch jdk / jre và đường dẫn xây dựng (ví dụ jdk 1.6v33, jdk 1.7, ....) sau khi bạn phải đặt Trình biên dịch Java như đã viết trước đó.
Tôi đã làm mọi thứ và vẫn không làm việc. Giải pháp là xóa các tệp. Class đã được biên dịch và mục tiêu của tệp chiến tranh được tạo và bây giờ nó đang hoạt động :)
Tôi tìm thấy một lý do khác cho tin nhắn này. Tôi đã lập trình Scala. Giải pháp là:
Bây giờ việc gỡ lỗi sẽ hoạt động. Lưu ý rằng tôi đã cài đặt plugin Scala IDE, tùy chọn này có thể không khả dụng nếu bạn không có nó.
Tôi đã gặp vấn đề tương tự khi gỡ lỗi một WAR (được xây dựng từ nhiều tạo phẩm của dự án Eclipse) được triển khai cho Tomcat.
Tôi đang xây dựng mọi thứ bằng cách sử dụng tập lệnh xây dựng ANT. Nếu đây là những gì bạn đang làm, hãy đảm bảo rằng cờ debug = true được đặt trên mỗi tác vụ ant javac bạn có. Đây là vấn đề duy nhất của tôi - Tôi hy vọng nó sẽ giúp vấn đề của bạn!
Tôi đã có cùng một lỗi với JBoss 7.1 .. Và tôi cũng làm như Zefiro. Chỉ cần bỏ qua lỗi và tôi đã có thể đặt điểm dừng bình thường. Trong trường hợp của tôi, tôi đã xây dựng trình xây dựng kiến nghĩ và đây là nhiệm vụ javac của tôi:
<javac
srcdir="${src.dir}"
destdir="${build.classes.dir}"
includeantruntime="false"
debug="${debug}"
verbose="false"
debuglevel="lines,vars,source"
source="1.6"
target="1.6">
<!-- Sppressing warning for setting an older source without bootclasspath
(see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
<compilerarg value="-Xlint:-options"/>
<classpath>
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
</classpath>
</javac>
Tôi có cùng một vấn đề, tôi đã dành rất nhiều thời gian để tìm kiếm giải pháp nhưng những giải pháp này không đáng tin, vì vậy tôi tự nghiên cứu tất cả các trường hợp, cuối cùng tôi phát hiện ra vấn đề đó là xung đột giữa các phiên bản JDK. Dưới đây là các bước để giải quyết vấn đề: 1. Xóa tất cả phiên bản JDK và JRE, chỉ giữ lại một phiên bản. 2. Đặt hệ thống JAVA_HOME và trình biên dịch java trong Eclipse là như nhau. Trong một số trường hợp, lỗi ở trên sẽ không biến mất, nhưng chúng tôi có thể chạy ở mô hình gỡ lỗi.
Vấn đề của tôi là tôi đã có 2 JAR và tôi đã cố gắng ghi đè cái này với cái kia dựa trên thứ tự của nó trong Java Build Path => Order & Export
tab trong Eclipse, bởi vì cái này là để gỡ lỗi và cái kia thì không (JAR gỡ lỗi là thứ tự đầu tiên). Khi tôi làm theo cách này, tôi phải tự đính kèm một nguồn.
Tôi đã thử xóa JAR không gỡ lỗi và đặt JAR gỡ lỗi trong thư mục \ WEB-INF \ lib \, dọn dẹp, xây dựng, v.v., và nó đã hoạt động. Lần này (đã loại bỏ nguồn đính kèm), nó sẽ tự động cho phép tôi điều hướng qua mã gỡ lỗi mà không phải đính kèm bất kỳ nguồn nào theo cách thủ công. Điểm dừng và gỡ lỗi cũng hoạt động.
Trong trường hợp bất cứ ai vẫn gặp sự cố, tôi cũng đã thử tất cả các giải pháp cụ thể được đề cập trong các câu trả lời khác:
Add line number attributes...
org.eclipse.jdt.core.prefs
như được đề cập trong câu trả lời khác: https://stackoverflow.com/a/31588700/1599699Tôi cũng đã tắt máy chủ thông thường (và đảm bảo java.exe thực sự bị đóng ...), xóa các thư mục \ build \ trong cả hai dự án, khởi động lại Eclipse với tham số -clean, tạo lại JAR gỡ lỗi, làm mới, làm sạch và xây dựng dự án với JAR gỡ lỗi trong đó, khởi động máy chủ ở chế độ gỡ lỗi, xuất bản / dọn dẹp và ngắt điểm.
Tôi đã làm tất cả những gì được liệt kê ở trên trong khi biên dịch / xây dựng các lọ - vẫn có cùng một vấn đề.
Cuối cùng, các thay đổi jvmarg được liệt kê bên dưới trong khi khởi động máy chủ là điều cuối cùng đã làm việc cho tôi:
1) Đã xóa / Nhận xét một loạt các jvm args liên quan đến javaagent và boot classpath.
2) Đã bật / hủy nhận xét dòng sau:
Sau đó, khi tôi khởi động máy chủ, tôi có thể đạt điểm dừng của mình. Tôi nghi ngờ rằng javaagent bằng cách nào đó đã can thiệp vào khả năng phát hiện số dòng của Eclipse.
Kiểm tra / làm như sau:
1) Trong "Cửa sổ -> Tùy chọn -> Java -> Trình biên dịch -> Tạo tệp lớp", tất cả các tùy chọn phải là True:
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) Trong thư mục .sinstall của dự án của bạn, hãy tìm một tệp có tên org.eclipse.jdt.core.prefs. Xác minh hoặc đặt org.eclipse.jdt.core.compiler.debug.lineNumber = tạo
3) Nếu cửa sổ lỗi vẫn xuất hiện, nhấp vào hộp kiểm để không hiển thị thông báo lỗi.
4) Làm sạch và xây dựng dự án. Bắt đầu gỡ lỗi.
Thông thường cửa sổ lỗi không được hiển thị nữa và thông tin gỡ lỗi được hiển thị chính xác.
Tôi cũng gặp vấn đề này. Tôi đang sử dụng một kịch bản xây dựng kiến. Tôi đang làm việc trên một ứng dụng cũ nên tôi đang sử dụng phiên bản jdk 1.4.2. Điều này được sử dụng để làm việc vì vậy tôi bắt đầu tìm kiếm xung quanh. Tôi nhận thấy rằng trong cấu hình Gỡ lỗi trên tab JRE, phiên bản Java đã được đặt thành 1.7. Khi tôi thay đổi nó trở lại 1.4, nó hoạt động.
Tôi hi vọng cái này giúp được.
Tôi đã cố gắng gỡ lỗi trình quản lý ghi nhật ký và cần thay đổi jre thành jdk và sau đó chọn jdk này trong tab "chính", "Môi trường chạy thi hành Java" | "thời gian chạy JRE" của cấu hình gỡ lỗi thì tất cả đều ổn.
Tôi đã thấy vấn đề này khi tôi chú thích một lớp với @ManagedBean (javax.annotation.ManagedBean). Thông báo cảnh báo xuất hiện khi chạy ứng dụng mới được tuân thủ trên JBoss EAP 6.2.0. Bỏ qua nó và chạy dù sao cũng không giúp được gì - điểm dừng không bao giờ đạt được.
Tôi đã gọi bean đó bằng EL trong trang JSF. Bây giờ ... có thể là @ManagedBean không tốt cho điều đó (tôi mới biết về CDI). Khi tôi thay đổi chú thích của mình thành @Model, bean của tôi đã thực thi nhưng cảnh báo điểm dừng cũng biến mất và tôi đạt điểm dừng như mong đợi.
Tóm lại, nó chắc chắn trông giống như chú thích @ManagedBean làm rối tung các số dòng, bất kể đó có phải là chú thích sai sử dụng hay không.
Hãy chắc chắn rằng dự án trong đó lớp chính của thời gian chạy là cùng một dự án trong đó lớp bạn có các điểm dừng . Nếu không, hãy đảm bảo rằng cả hai dự án đều nằm trong đường dẫn cấu hình đang chạy và xuất hiện trước bất kỳ thư mục và thư mục lớp nào.