Eclipse - trình gỡ lỗi không dừng lại ở điểm ngắt


96

Tôi đang cố gắng để bắn một JUnit. Trong mã nguồn, tôi đã đặt điểm ngắt ở hai nơi: 1) trong dòng nơi khởi tạo thành viên tĩnh 2) dòng đầu tiên của một trong các trường hợp thử nghiệm.

Trình gỡ lỗi dừng ở dòng khởi tạo trường tĩnh. Nhưng nó không dừng lại trong trường hợp thử nghiệm. Bất kể tôi đặt điểm ngắt ở đâu trong trường hợp thử nghiệm, trình gỡ lỗi không dừng lại ở đó. Tôi biết chắc chắn rằng trường hợp kiểm tra được thực thi vì tôi có thể thấy các thông báo nhật ký mà tôi đã thêm xuất hiện trong nhật ký.

Mọi sự trợ giúp sẽ rất được trân trọng.

Tôi đang sử dụng Eclipse Galileo và trình khởi chạy JUnit4.


1
Mã của bạn có được biên dịch với tùy chọn -g được bật để tạo thông tin gỡ lỗi trong tệp .class không? Đó là bắt buộc, tất nhiên.
duffymo 03/09/09

Có, nó được biên dịch với tùy chọn -g.
Roy

Bạn cũng có thể thêm thông tin về phiên bản JUnit và JRE bạn đang sử dụng không? Tôi tin rằng điều đó rất hữu ích trong bối cảnh này.
Vineet Reynolds

Nhân tiện, JDK đang được sử dụng quan trọng hơn (có một số JDK lộn xộn có thể gây ra điều này). Vui lòng bỏ qua truy vấn về phiên bản JUnit.
Vineet Reynolds

Xin lỗi tôi nên đã bao gồm điều đó. JDK 1.6 Cập nhật 14.
Roy

Câu trả lời:


39

Điều này có thể liên quan đến một trong các lỗi trong JDK 6 Cập nhật 14, như được chỉ ra trong ghi chú phát hành cho JDK 6 cập nhật 15 .

Nếu đây thực sự là vấn đề, bạn nên chuyển sang phiên bản cao hơn của JDK (điều đó không có gì đảm bảo, vì các bản sửa lỗi đã được phát hành đối với 6u16, 6u18 và 7b1 ). Đặt cược tốt nhất là sử dụng cờ -XX: + UseParallelGC. Tăng kích thước của kích thước đống tối thiểu và tối đa, để trì hoãn GC đầu tiên, mang lại sự giảm nhẹ tạm thời.

Nhân tiện, hãy sử dụng báo cáo lỗi này trong Eclipse để theo dõi cách những người khác xử lý lỗi.


1
Tôi đã nâng cấp lên bản cập nhật JDK 1.6 16. Bây giờ nó dừng lại ở tất cả các điểm ngắt mà tôi đã đặt. Cảm ơn sự giúp đỡ của bạn.
Roy

Không có gì. u16 dường như là bản phát hành mà điều này đã được khắc phục ở mức độ đủ tốt, mặc dù ghi chú phát hành của u15.
Vineet Reynolds

Cảm ơn @Vineet - Tôi đang nhổ tóc vì cái này :-)
Jim Garrison

@VineetReynolds: Tôi đã thấy những câu trả lời có giá trị của bạn liên quan đến Jboss và Java ee 6. Bạn có thể giúp tôi giải quyết vấn đề này không? stackoverflow.com/questions/28954323/…
cơn bão não

96

Khắc phục có thể đơn giản như nhấp vào chạy / bỏ qua tất cả các điểm ngắt. Đã làm cho tôi.


3
nó đã cho tôi ba ngày để phát hiện rằng tôi muốn bằng cách nào đó nhấp rằng
henry

1
Cảm ơn ... phải có nhấp rằng thanh công cụ biểu tượng một cách tình cờ nào đó :-P
kenyee

4
Cảm ơn ... không biết khi đó đã nhấp
njfife

1
Cảm ơn bạn rất nhiều. Đối với những người dùng khác, trong tình huống này nếu bạn thực hiện một điểm ngắt, nó sẽ xuất hiện dấu gạch chéo.
saurabheights

Tôi cũng vậy. Tôi chưa bao giờ nhấp vào nó ... !! Phiên bản: Mars Release (4.5.0) Id bản dựng: 20150621-1200
Beezer

52

Đảm bảo rằng trong Run> Debug Configurations, đã chọn 'Stop in main', nếu có thể áp dụng cho trường hợp của bạn.


1
Hãy chắc chắn để đọc phản hồi trước khi đăng. Vấn đề là phiên bản jvm của họ .. và đã được giải quyết ba năm trước. Tốt nhất đừng khôi phục các chủ đề cũ trừ khi câu trả lời của bạn đóng góp một điều gì đó quan trọng, điều đó chưa được đề cập trong các câu trả lời trước đó.
Leigh

6
Cảm ơn. @Answerer câu trả lời của bạn đã giải quyết được vấn đề của tôi. Thật lạ là "Dừng trong chính" không được đặt.
Yu Shen

25
Dường như câu trả lời của ông đã đóng góp một cái gì đó đáng kể mà không được đã được đề cập trong câu trả lời trước :)
scubbo

Lưu ý, đây là tùy chọn dành cho các ứng dụng Java nhưng không phải ứng dụng Android.
Noumenon

21

Thông thường khi điều này xảy ra với tôi (hiếm nhưng nó xảy ra) có nghĩa là mã đang được thực thi khác với mã trong trình chỉnh sửa. Đôi khi, đối với Eclipse, các lớp được xây dựng và mã trong trình soạn thảo không đồng bộ. Khi điều đó xảy ra, tôi nhận được tất cả các loại hành vi gỡ lỗi kỳ lạ (gỡ lỗi các dòng trống, bỏ qua các dòng mã, v.v.).

Khởi động lại Eclipse, dọn dẹp tất cả các dự án và xây dựng lại mọi thứ thường làm mọi thứ trở nên rõ ràng. Tôi cũng có các plugin Maven (các phiên bản cũ hơn ... đã không có nó trong một thời gian) cũng có xu hướng làm điều đó.

Nếu không, nó có thể là một lỗi, có thể là lỗi mà Vineet đã nêu,

Hi vọng điêu nay co ich


Đúng vậy, những gì bạn đã nêu xảy ra nhiều hơn trong các IDE không tự động biên dịch lại mã. Oracle JDeveloper (từ kinh nghiệm cá nhân) và ở mức độ thấp hơn (Netbeans) đã được tìm thấy mong muốn.
Vineet Reynolds

1
Lời khuyên tốt. Nói chưa đủ. Đôi khi chúng ta nghĩ quá kỹ vấn đề và đó chỉ là do hệ thống không đồng bộ. Chẳng hạn như khi khởi động lại máy tính để xử lý các vấn đề đơn giản.
Xonatron

Cảm ơn, đó là vấn đề trong trường hợp của tôi. Nghe có vẻ ngu ngốc, nhưng việc dọn dẹp và F5 đơn giản sau khi xây dựng đã thực hiện công việc.
jfajunior

20

Bạn có thể đã vô tình bỏ qua tất cả các điểm ngắt trong thanh công cụ Eclipse. Để khắc phục điều này, hãy vào Eclipse -> Run -> Skip All Breakpoints.


1
Arggh, có một phím tắt cho điều này, có lẽ tôi đã không vô tình kiểm tra một mục menu, nhưng tôi có khả năng đã nhấn Ctrl + Alt + B. Dù sao đi nữa cũng xin cám ơn.
Patru

3

Dự án -> Clean dường như phù hợp với tôi trên JRE 8


2

Để gỡ lỗi hoạt động với điều khiển từ xa, các tệp java .class phải được tuân thủ cùng với thông tin gỡ lỗi. Nếu tùy chọn " -g: none " được chuyển đến trình biên dịch thì tệp lớp sẽ không có thông tin cần thiết và do đó trình gỡ lỗi sẽ không thể khớp các điểm ngắt trên mã nguồn với lớp đó từ xa. Trong khi đó, nếu các tệp lọ / lớp bị xáo trộn , thì chúng cũng sẽ không có bất kỳ thông tin gỡ lỗi nào. Theo phản hồi của bạn, rất có thể đây không phải là trường hợp của bạn, nhưng thông tin này có thể hữu ích cho những người khác gặp phải vấn đề tương tự.


2

Trong trường hợp của tôi, vấn đề là tôi không mở chế độ Gỡ lỗi ở chế độ Gỡ lỗi, vì vậy:

1 - Đảm bảo rằng bạn đã mở phối cảnh gỡ lỗi:

trình gỡ lỗi nhật thực không hoạt động 1

2 - Đảm bảo rằng bạn đã mở chế độ xem gỡ lỗi:

trình gỡ lỗi nhật thực không hoạt động 2



1

Đối với JDK7, run-> Debug Configurations, hãy chọn "Giữ JUnit chạy sau khi chạy thử khi gỡ lỗi".


1

Đã xảy ra với tôi một lần, khi tôi bỏ chọn "Chạy> Tự động xây dựng" và quên kiểm tra lại.


1

Hãy chắc chắn rằng bạn khai báo gói ở trên cùng. Trong mã thú vị của tôi, điều này dừng lại ở các điểm ngắt:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Điều này không dừng lại ở các điểm ngắt:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Sau khi đấu tranh rất nhiều điều này giải quyết vấn đề của tôi. Cảm ơn +1
Federico Piazza

0

Để loại bỏ các điểm ngắt :

  1. Gỡ lỗi lớp của bạn dưới dạng bài kiểm tra tháng sáu
  2. Khi trình gỡ lỗi của bạn dừng, hãy nhấp vào tab "điểm ngắt" bên cạnh "biến" và "biểu thức"
  3. Ở trên cùng bên phải của tab điểm ngắt, nhấp vào nút có hai chữ 'X'
  4. Dừng kiểm tra, thay thế điểm ngắt của bạn và chạy lại trình gỡ lỗi

0

Đồng thời xác minh xem các điểm ngắt trên các dòng khác CÓ hoạt động hay không, đó có thể là lỗi trong trình gỡ lỗi. Tôi đã gặp sự cố với trình gỡ lỗi Eclipse trong đó đặt một điểm ngắt trên một phép gán boolean có mã ở dòng tiếp theo không hoạt động. Tôi đã báo cáo điều này ở đây , nhưng đặt nó ở dòng trước hoặc dòng tiếp theo thì có.


0

Nếu không có gì hoạt động-

  1. Xóa cấu hình gỡ lỗi từ xa / cục bộ đó và tạo một cấu hình mới.
  2. Thêm nguồn trong cấu hình gỡ lỗi.

0

Một vấn đề khác có thể xảy ra là cổng trình gỡ lỗi có thể bị tường lửa chặn. Ví dụ: tôi đang sử dụng mule anypoint studio (v 5.4.3). Cổng trình gỡ lỗi mặc định là 6666. Khi một luồng được thực thi, nó sẽ không dừng lại ở điểm ngắt. khi tôi thay đổi cổng thành khác (ví dụ: 8099), nó hoạt động tốt.


0

Đi tới Right click->Debug Configurationvà kiểm tra xem có quá nhiều phiên bản gỡ lỗi được tạo hay không. Vấn đề của tôi đã được giải quyết khi tôi xóa nhiều phiên bản gỡ lỗi khỏi cấu hình và gỡ lỗi mới bắt đầu.


0

Nếu bạn đang sử dụng Eclipse,

Nhấp chuột phải vào thư mục dự án của bạn trong "Package Explorer".

Goto Source -> Dọn dẹp và chọn dự án của bạn.

Thao tác này sẽ dọn dẹp mọi thứ lộn xộn và điểm ngắt của bạn sẽ hoạt động ngay bây giờ.



0

Trong trường hợp của tôi, tôi có nhiều dự án trong cùng một không gian làm việc. Tệp java mà tôi đang cố gắng gỡ lỗi đã có trong nhiều dự án với cùng một gói.

Tôi không cần dự án khác, vì vậy chỉ cần đóng các dự án không liên quan (hoặc xóa tệp khỏi dự án không liên quan).


0

Một nhận xét bổ sung về câu trả lời của Vineet Reynolds.

Tôi phát hiện ra rằng tôi phải đặt -XX:+UseParallelGC trongeclipse.ini

Tôi thiết lập các đối số máy ảo (vm) như sau

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

đã giải quyết được vấn đề.


-2

Đây là những gì làm việc cho tôi:

Tôi phải đặt địa chỉ máy chủ cục bộ của mình trong cấu hình Máy chủ PHP như sau:

nhập mô tả hình ảnh ở đây

Lưu ý : địa chỉ đó, là địa chỉ tôi định cấu hình trong tệp .conf Apache của mình .

Lưu ý : điểm ngắt duy nhất đang hoạt động là 'Ngắt ở dòng đầu tiên', sau đó, các điểm ngắt không hoạt động.

Lưu ý : kiểm tra thuộc tính xdebug của bạn trong tệp php.ini và xóa bất kỳ thuộc tính nào bạn cho là không cần thiết.


1
Tôi không thấy cách này trả lời câu hỏi (khoảng JUnit và Java gỡ lỗi)
Newtopian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.