Xin chào tất cả mọi người trong cộng đồng CodeGym! Hôm nay chúng ta hãy nói về gỡ lỗi — nó là gì và cách gỡ lỗi trong IntelliJ IDEA. Bài viết này dành cho những người đã có kiến thức tối thiểu về Java Core. Sẽ không có bất kỳ khuôn khổ hoặc thủ tục phức tạp nào để xuất bản thư viện. Một cuộc dạo chơi nhàn nhã. Vì vậy, hãy làm cho mình thoải mái và hãy bắt đầu!
Chọn dự án trình bày gỡ lỗi và nhấn OK . Sau đó, bạn sẽ thấy cửa sổ sau:
Giữ nguyên các tùy chọn đã chọn: Nhập dự án từ các nguồn bên ngoài và Maven . Nhấp vào Kết thúc . Bây giờ chúng tôi đã nhập dự án, chúng tôi có thể mô tả phần còn lại của quy trình bằng một ví dụ sống động.
biểu tượng trong phần Gỡ lỗi. Điều này sẽ tắt tiếng tất cả các điểm dừng. Để xem breakpoint nào đã được thiết lập, bạn có thể vào mục Debug góc dưới bên trái tìm biểu tượng
hoặc nhấn tổ hợp phím Ctrl+Shift+F8 :
Di chuyển đến danh sách breakpoint ta sẽ thấy như sau:
Có 2 breakpoint đây:
Trong cửa sổ xuất hiện, hãy viết tên của ngoại lệ mà bạn muốn thêm, chọn từ danh sách và nhấp vào OK : Điều
đó kết thúc phần sơ lược của chúng ta về cách thiết lập mọi thứ, vì vậy bây giờ chúng ta' Tôi sẽ chuyển sang một số thực hành.
tài liệu README, có thể tìm thấy trong thư mục gốc của dự án, hành vi dự kiến của tất cả các loài hoa mà từ đó mật hoa được thu thập là lượng mật ong thu được (có dạng gấp đôi ) bằng một nửa mật hoa thu thập được. Dự án có các lớp sau:
Chúng ta cần điều tra và xác định vấn đề là gì. Từ ngăn xếp theo dõi ở góc dưới bên phải, chúng ta có thể thấy rằng trong RuntimeException đã bị ném vào
Đó chính là điều chúng ta đã nói ở trên. Hãy theo dõi RuntimeException này bằng cách chạy
Kết quả là, chúng ta sẽ làm cho chương trình bị dừng tại thời điểm ngay trước khi ném ngoại lệ và chúng ta sẽ thấy biểu tượng này: ![Gỡ lỗi trong IntelliJ IDEA: hướng dẫn cho người mới bắt đầu - 17]()
Để có được tất cả thông tin có sẵn, chúng ta cần tìm trong phần Gỡ lỗi. Nó có một biếnngăn hiển thị tất cả các biến có sẵn trong phần này của ứng dụng:
Ứng dụng chạy đến khi hoàn thành và đưa ra câu trả lời sau:
tài liệu tệp README, mật hoa được chuyển đổi thành mật ong theo tỷ lệ 2 trên 1:
Chúng tôi sẽ xem xét điểm này chi tiết hơn. Chương trình đã dừng thực thi trước khi thực hiện dòng 28. Ở phần bên dưới, chúng ta thấy phần Gỡ lỗi, phần này hiển thị tất cả thông tin có sẵn về ứng dụng đang chạy. Như đã đề cập, khung Biến chứa tất cả các biến và đối tượng có sẵn từ phần này của ứng dụng. Khung Khung hiển thị các bước mà ứng dụng đang trải qua — bạn có thể xem các bước (khung) trước đó và xem tất cả dữ liệu cục bộ. Để tiếp tục chạy chương trình, bạn có thể nhấn F9 hoặc biểu tượng màu xanh lá cây, như hình bên dưới:
Để dừng chương trình, hãy nhấp vào ô vuông màu đỏ:
Để khởi động lại ứng dụng ở chế độ gỡ lỗi, hãy nhấp vào mũi tên:
Hơn nữa, bạn có thể tiếp tục qua ứng dụng từng bước bằng hai phím:
Bây giờ chúng tôi sẽ sử dụng F8 để thực hiện phương pháp này và mô tả những gì xảy ra trong đó:
tài liệu có lỗi và cần được cập nhật. Hãy cập nhật tệp README:
Stack Overflow CodeGym :)

Tại sao bạn cần chế độ Gỡ lỗi
Hãy ngay lập tức làm rõ điều gì đó cho chính chúng ta: không có mã nào không có lỗi... Đây chỉ là cách cuộc sống vận hành. Vì vậy, chúng ta không nên gục ngã và bỏ cuộc nếu mã của chúng ta không hoạt động như chúng ta mong đợi. Nhưng chúng ta nên làm gì? Chà, chúng ta có thể đặtSystem.out.println
các câu lệnh ở khắp mọi nơi và sau đó lướt qua đầu ra của bàn điều khiển với hy vọng tìm ra lỗi. Điều đó nói rằng, bạn có thể (và mọi người làm) gỡ lỗi bằng cách ghi nhật ký cẩn thận. Nhưng nếu bạn có thể chạy mã của mình trên máy cục bộ, thì tốt hơn là sử dụng chế độ Gỡ lỗi . Tôi muốn lưu ý ngay rằng trong bài viết này, chúng ta sẽ xem xét việc gỡ lỗi một dự án bằng IntelliJ IDEA.
Chế độ gỡ lỗi là gì?
Chế độ gỡ lỗi là để gỡ lỗi (kiểm tra) mã đang chạy. Nó giúp bạn có thể dừng thực hiện tại những nơi được chỉ định và xem mọi thứ đang tiến triển như thế nào. Nó cho phép bạn hiểu trạng thái của chương trình tại một vị trí cụ thể trong mã. Nó giống như việc có thể dừng đồng hồ và nhìn mọi thứ từ một phía. Mát mẻ, phải không? Mục tiêu của chúng tôi là học cách gỡ lỗi ứng dụng một cách nhanh chóng và dễ dàng bằng môi trường phát triển IntelliJ IDEA được yêu thích của chúng tôi.Những gì bạn cần để bắt đầu gỡ lỗi
Đây là một số lời khuyên miễn phí: trong khi đọc bài viết này, hãy làm mọi thứ sẽ được mô tả ở đây — bạn có mọi thứ bạn cần để làm theo. Những gì bạn cần:- IntelliJ IDEA phiên bản 2019.3.1 trở lên. Trong trường hợp ai đó không có cái này, đây là liên kết nơi bạn có thể tải xuống . Tải xuống Phiên bản cộng đồng — đó là phiên bản mà tôi sẽ sử dụng.
- Sao chép dự án GitHub này và nhập nó qua IDEA.


Chỉ là một chút lý thuyết ... Tôi hứa :D
Để bắt đầu gỡ lỗi dù chỉ một chút, bạn cần hiểu điểm ngắt là gì và làm quen với một vài phím nóng. Điểm dừng là một điểm đánh dấu đặc biệt cho biết nơi bạn muốn dừng thực thi ứng dụng, có thể dựa trên trạng thái ứng dụng. Bạn có thể đặt điểm ngắt bằng cách nhấp chuột trái vào bảng điều khiển bên trái hoặc bằng cách nhấp vào vị trí mã và nhấn Ctrl+F8 . Hãy xem xét ba loại điểm dừng: điểm ngắt dòng, điểm theo dõi trường và điểm ngắt phương thức. Cái này nó thì trông như thế nào:-
Trên một dòng:
Nếu một câu lệnh có biểu thức lambda, thì IDEA sẽ nhắc bạn chọn đặt điểm ngắt trên toàn bộ câu lệnh hay cụ thể trên biểu thức lambda:
-
Trên một phương pháp:
-
Trên một lớp học:




- Bee.java:24 — trong lớp Bee ở dòng 24
- Main.java:14 — trong Main class ở dòng 14


Chúng ta hãy làm điều này được gọi là gỡ lỗi!
Tôi xuất thân từ một gia đình nuôi ong lâu đời, vì vậy dự án mà tôi tạo ra để minh họa việc gỡ lỗi mô tả mô hình quy trình ong lấy mật hoa, chế biến mật hoa thành mật ong và sau đó lấy mật ong từ tổ ong. Theo tệp- Bee — một con ong thợ bình thường
- BeeQueen - con ong chúa
- BeeHive - tổ ong
- HoneyPlant — cây mật ong (nguồn mật hoa) từ đó mật hoa được thu thập
- Chính - đây là nơi chúng tôi tìm thấy
public static void main()
, phương thức bắt đầu thực thi.
main()
phương thức này, thì chúng ta thấy rằng chương trình của chúng ta không những không tính được lượng mật ong mà còn đưa ra một ngoại lệ... 
HoneyPlant.java:20
: 
main()
phương thức trong chế độ gỡ lỗi. Để thực hiện việc này, hãy nhấp vào mũi tên hình tam giác màu xanh lá cây trong IntelliJ IDEA bên cạnh phương main()
thức. 


- mật hoa = 1,0;
- công suất mật hoa = -1,0.
if (nectar == 0) {
return 0;
}
Nhưng rắc rối là chúng ta đang kiểm tra sai biến. Đây là một lỗi trong mã. Thay vì kiểm tra lượng mật hoa có sẵn trong bông hoa (được lưu trữ trong biến nectarCapacity ), chương trình sẽ kiểm tra giá trị của tham số mật hoa của phương thức , là lượng mật hoa mà chúng ta muốn lấy từ bông hoa. Đây rồi! Lỗi đầu tiên của chúng tôi! Sau khi sửa lỗi này, chúng tôi nhận được mã sau đây:
if (nectarCapacity == 0) {
return 0;
}
Bây giờ hãy chạy main()
phương thức này theo cách thông thường (Run 'Main.main()')
. Không có ngoại lệ nào được ném ra và chương trình hoạt động: 
"33.0 honey was produced by 7 bees from 2 honey plants"
Bây giờ mọi thứ sẽ ổn, nhưng câu trả lời này không chính xác... Theo
## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
Phương pháp chính rõ ràng có hai cây mật ong với 30 và 40 đơn vị mật hoa tương ứng. Vì vậy, cuối cùng chúng ta nên có 35 đơn vị mật ong. Nhưng chương trình đang nói với chúng tôi rằng chúng tôi nhận được 33. Hai đơn vị còn lại đã đi đâu? Hãy cùng tìm hiểu! Để thực hiện việc này, hãy đặt điểm ngắt trong Main.main()
phương thức trên dòng 28, nơi beeHive.populateHoney()
được gọi và chạy main()
phương thức trong chế độ Gỡ lỗi: 



- F8 — Bước qua mã mà không bước vào các phương pháp;
- F7 - Bước qua mã và bước vào phương pháp.
beeHive.populateHoney()
phương thức. Bước vào nó, chúng tôi nhận được: 
- Dòng 25 — Stream API được sử dụng để thu thập mật hoa từ tất cả các con ong
- Dòng 26 — Mật ong mới tạo được thêm vào mật ong hiện có;
- Dòng 27 - 2 đơn vị mật ong được phân bổ cho nữ hoàng
- Dòng 28 — Hai đơn vị này được loại bỏ khỏi tổng lượng mật ong
- Dòng 29 — Nữ hoàng ăn mật này.
## Documentation
Presentation based on honey production.
**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
Đã được thực hiện. Chúng tôi đã sửa tất cả các lỗi chúng tôi tìm thấy. Chúng ta có thể bình tĩnh tiếp tục với vẻ ngoài tự mãn, nhâm nhi chút cà phê và đọc các bài viết trên Hãy tóm tắt
Trong bài viết này, chúng tôi đã học được:- công việc của mọi người đều có lỗi và gỡ lỗi là một cách tuyệt vời để khắc phục chúng
- breakpoint là gì và có những loại breakpoint nào
- cách đặt điểm ngắt ngoại lệ
- làm thế nào để bước qua mã trong chế độ gỡ lỗi
GO TO FULL VERSION