Cách gỡ lỗi Java như một "Chiên Gia"

Ngày đăng: 02/07/2020   -    Cập nhật: 09/10/2020
Hơn 50% thời gian lập trình viên dùng để gỡ lỗi. Hôm nay, mình sẽ hướng dẫn bạn gỡ lỗi Java như một "Chiên gia" - Khoa học - Hiệu quả và đỡ Đau đầu hơn.

Cách gỡ lỗi Java như "Chiên gia"

Cách gỡ lỗi Java như "Chiên gia"

Thông thường chúng ta viết chương trình Java gặp những lỗi về mặt cú pháp, câu lệnh, khá là nhiều hơn là về mặt lỗi logic mà chúng ta không thể thấy khi build project.

Đây là vấn đề gặp phải khi bạn chạy thuật toán, hay đơn giản là chạy phần mềm nhưng kết quả không giống như ý mình, dù không có bất kỳ lỗi cú pháp nào.


Debugging Tool!

Đúng vậy một công cụ mạnh mẽ để debug (gỡ lỗi) chương trình. Vậy bug là gì? Và debug là cái gì?

Bug là ám chỉ các lỗi xảy ra trong logic, hay bất kỳ vấn đề gì gây ra việc làm cho ứng dụng không thực thi được hay thực thi sai.

Bug có thể xuất hiện bất cứ mọi nơi.

Debug là quá tình tìm ra lỗi hay nguyên nhân gây ra lỗi (where is bug) để có hướng sửa lỗi (fix bug).

Có nghĩa là bạn có thể chạy từng dòng code. Xem kỹ càng cách nó hoạt động. Cụ thể như thế nào nhỉ thì sang phần tiếp nhé.


1. Các cách gỡ lỗi Java như một lập trình viên chuyên nghiệp


Công cụ Debugging có thể thực thi từng dòng mã và phân tích mã, các giá trị của các biến được đưa vào và xem biến này có giá trị bao nhiêu tại thời điểm dòng code đó thực thi.

Ở đây mình sẽ giới thiệu các bạn Debugging Tool của Eclipse nhé.

> Lưu ý: Bạn nào chưa biết sử dụng Eclipse thì có thể tìm hiểu thêm tại Hướng dẫn lập trình Java với Eclipse


1.1. Làm sao để mở trình Debugger trên Eclipse?


Thật ra thì có nhiều cách để mở trình gỡ lỗi trong Eclipse. Bạn có thể chạy trình gỡ lỗi bằng cách chọn vào Run → Debug (F11)

Mở trình Debug trên Eclipse

Mở trình Debug trên Eclipse
 
Sau khi mở debug bạn sẽ thấy giao diện như bên dưới:


Giao diện trình gỡ lỗi trên Eclipse

Giao diện trình gỡ lỗi trên Eclipse

Một vài phần mà bạn cần lưu ý:

  • Debug Windows: Bên trái,  class đang mở, trong đó lớp gỡ lỗi được hiển thị.
  • Class: Đây là class mà bạn muốn gỡ lỗi.
  • Variable: Phần này là bạn có thể xem các biến và trạng thái của chúng thay đổi trong quá trình thực thi. Bằng cách nhấp chuột phải vào các biến được hiển thị ở đây, bạn có thể thực hiện nhiều thao tác trên chúng như thay đổi hoặc xem loại dữ liệu của tụi nó,....
  • Breakpoint: Trong phần này, bạn có thể thay đổi điểm dừng (giải thích thêm). Từ đây bạn có thể thực hiện các thao tác nâng cáo trên các điểm dừng như xác định các điều kiện trên chúng.
  • Console: Đây là nơi bạn có thể thấy những gì mà chương trình đang chạy.

Bây giờ chúng ta đã có trình sửa lỗi, hãy bắt đầu gỡ lỗi nào.

Nếu bạn chạy mã thực thi trực tiếp tại thời điểm này, nó sẽ chạy hoàn toàn và dừng lại khi nó xảy ra ngoại lệ.

Tuy nhiên, bạn có muốn dừng lại khi nó vào mảng và từ đó bạn muốn chạy mọi dòng mã bằng cách thủ công không.


1.2. The Breakpoint (Điểm dừng)


Để kiểm soát thủ công chương trình trong thời gian bạn thực thi, bạn cần một cái gọi là Breakpoint (Điểm dừng).

Điểm dừng là một cách để thông báo cho trình gỡ lỗi từ nơi bạn muốn kiểm soát code của mình.

Áp dụng điểm dừng rất đơn giản nhưng nó khá quan trọng đấy.

Trên dòng nơi bạn muốn dừng, nhấp đúp vào lề trái, một vòng tròng màu xanh được tạo cạnh bên dòng như hình dưới đây:


Thiết lập Breakpoint hỗ trợ gỡ lỗi trên Eclipse

Thiết lập Breakpoint hỗ trợ gỡ lỗi trên Eclipse

Nếu bạn click chuột phải vào vòng tròn màu xanh đó, bạn sẽ có tùy chọn chuyển đổi (thêm điểm dừng) hoặc tắt điểm dừng.

Bạn cũng có thể đặt một điểm dừng bằng cách đặt con trỏ chuột vào chỗ bạn muốn và nhấn tổ hợp phím SHIFT + CTRL + B

Ở đây mình đã đặt điểm dừng ở đầu vòng lặp vì nếu bạn thấy ngoại lệ mà mình nhận được thì nằm bên trong vòng lặp này, do đó bạn cần đặt điểm dừng này ở khối code nơi mà bạn đang gặp lỗi.

Xong rồi.


Chạy Code trong chế độ Debug thôi nào.


Bây giờ, chương trình của mình đã có trình debug và đã đặt ở các điểm cần thiết, mình có thể chạy code ở chế độ gỡ lỗi.

Để chạy code trong chế độ gỡ lỗi, bạn có thể làm như sau:

Click vào Icon được hiển thị như bên dưới:

 

Chạy code Java trong chế độ gỡ lỗi 1

Chạy code Java trong chế độ gỡ lỗi

Hoặc Click chuột phải vào tên lớp nằm trong Project Explorer và click Debug As → Java Application.

Chạy code Java trong chế độ gỡ lỗi 2
 
Khi bạn chạy ứng dụng ở chế độ gỡ lỗi, cửa sổ sau sẽ hiển thị.


Cửa sổ hỗ trợ gỡ lỗi Java trên Eclipse

Cửa sổ hỗ trợ gỡ lỗi Java trên Eclipse
 
Bạn có thể thấy, dòng mà điểm dừng đang được chọn nó được tô màu và thực thi dòng đó và dừng việc thực thi tại dòng đó.

Bạn có thể xác nhận điều này bởi vì câu lệnh trước dòng đó được thực thi ở màn hình console.

Tuy nhiên, câu lệnh bên trong vòng lặp không được in ra.
           
Bạn có thể thấy các biến có giá trị cho đến khi thực thi dòng này.

Nếu bạn mở rộng biến mảng arr, thì bạn có thể thấy các giá trị trong đó.


Giá trị của các biến trong chế độ gỡ lỗi

Giá trị của các biến trong chế độ gỡ lỗi

Theo cách này, chúng ta có thể thấy giá trị của bất kỳ biến nào trong chế độ gỡ lỗi.

2. Các tùy chọn trong chế độ Debug trên Eclipse


Eclipse cung cấp sẵn một số tùy chọn để giúp bạn gỡ lỗi Java hiệu quả hơn tùy theo nhu cầu.

Tùy chọn #1: Step Into (F5)


Tùy chọn này cũng có sẵn như biểu tượng hiển thị bên dưới.

Tùy chọn hỗ trợ gỡ lỗi Java: F5

Tùy chọn hỗ trợ gỡ lỗi Java: F5
 
Sử dụng nó, bạn có thể chạy mã ở dòng đang ở và chuyển sang dòng tiếp theo.

Click và nó và code sẽ hiển thị như sau:


Sử dụng tùy chọn gỡ lỗi F5 - 1

Nếu bạn di chuột vào biến i trên dòng code này, thì bạn sẽ thấy giá trị của nó ở hai vị trí:
Sử dụng tùy chọn gỡ lỗi F5 - 2
 
Vì chúng ta cần điều hướng qua vòng lặp cho đến hết, bạn cần nhấn F5 lần nữa.

Ngay khi bạn làm điều đó, nó thực thi dòng 9 và quay trở lại dòng 7, do đó bạn có thể thấy giá trị đầu tiên của mảng được in trong bảng điều khiển.


Sử dụng tùy chọn gỡ lỗi F5 - 3
 
Khi bạn tiếp tục nhấn F5, bạn sẽ thấy giá trị của biến i thay đổi và các giá trị mảng được in trên console cho đến khi xảy ra ngoại lệ.

Tại thời điểm ngoại lệ thì code sẽ không lấy bất kỳ dữ liệu nào từ mảng nữa, nó sẽ thông báo nguồn không thể tìm thấy.
 
Điều này đặc trưng cho lỗi này và đối với các lỗi khác nhau, bạn có thể nhận được các loại thông báo khác nhau, tuy nhiên, bạn sẽ tìm thấy dòng code nào bị break.


Tùy chọn #2: Step over of (F6)


Lựa chọn này cũng có sẵn như biểu tượng bên dưới.

Tùy chọn hỗ trợ gỡ lỗi Java: F6

Tùy chọn hỗ trợ gỡ lỗi Java: F6

Sử dụng lựa chọn này bạn có thể bỏ qua trình gỡ lỗi thực thi code.

Trong trường hợp này, code sẽ được thực thi bình thường cho đến khi bạn tiếp tục nhấn F6 và khi đến dòng cuối cùng, bạn sẽ có ngoại lệ như bạn vẫn gặp khi thực thi bình thường.
 
Tùy chọn hỗ trợ gỡ lỗi Java F6 - 2

Tùy chọn #3: Step out of Step return (F7)


Lựa chọn này có thể được sử dụng khi code của bạn đang ở trong một phương thức và đang được gọi từ một nơi khác.

Khóa này sẽ kết thúc việc thực thi phương thức được gỡ lỗi và trở về mã từ phương thức này được gọi.

Điều này cũng có thể được thực hiện bằng cách nhấp vào biểu tượng bên dưới.


Tùy chọn hỗ trợ gỡ lỗi Java F7

Tùy chọn hỗ trợ gỡ lỗi Java F7

Tùy chọn #4: Resume or F8


Lựa chọn này sẽ báo cho trình gỡ lỗi tiếp tục thực hiện chương trình cho đến khi đạt điểm dừng tiếp theo.

Biểu tượng của tính năng này trên Eclipse như sau:


Tùy chọn hỗ trợ gỡ lỗi Java F8

Tùy chọn hỗ trợ gỡ lỗi Java F8
 
Nắm được tất các tùy chọn này thì bạn đã có thể Debug hiệu quả hơn rất nhiều đấy.


Bonus #1: Mẹo gỡ lỗi Java đơn giản mà nhiều người hay bỏ qua


Có một vấn đề thường gặp của các bạn mới học lập trình là, khi gặp lỗi, việc đầu tiên của bạn là xem lại chương trình ngay lập tức.

Sau đó chạy đi chạy lại cầu mong xem nó có chạy được không.

Tiếp đến là loay hoay Google, hỏi anh em bạn bè.
...

Nói chung là chưa gì đã loạn cả lên.

Để giải quyết vấn đề này thì cũng không có gì cao siêu cả.

Kinh nghiệm của mình là: Luôn ĐỌC THÔNG BÁO LỖI trước khi thực hiện bất kỳ hành động nào.

Các IDE / trình duyệt hiện nay đều hỗ trợ tính năng thông báo lỗi rất tốt. Vì thế, chỉ cần đọc kỹ thông báo thì cơ hội sửa lỗi thành công của bạn đã thành công hơn 50% rồi.

Còn các lỗi thuộc vấn đề logic, do bạn code sai, dự án lớn, chạy được mà không ra đúng... thì mới cần các bước như mình vừa giới thiệu ở trên.


Bonus #2: Mẹo gỡ lỗi Java sử dụng vịt cao su


Mẹo gỡ lỗi Java sử dụng Vịt cao su

Mẹo gỡ lỗi Java sử dụng Vịt cao su

THẬT ĐẤY!!!!

Để thực hiện cách gỡ lỗi này bạn sử dụng một con vịt cao su, cố gắng trình bày tình huống bạn gặp phải, giải thích từng dòng, từng dòng code cho con vịt cao su hiểu.

Mô tả thật kỹ càng vấn đề và cả các giải pháp bạn đã thử.

Phương pháp này tên tiếng Anh là Rubber Duck Debugging, bạn có thể đọc thêm về nó trên Wiki.

Nghe khá là buồn cười phải không? :D

Nhưng không.

Sử dụng vịt cao su là phương pháp hỗ trợ gỡ lỗi được rất nhiều lập trình viên trên thế giới áp dụng.

Ý nghĩa sâu xa trong giải pháp này là: Tự trò chuyện với chính bản thân mình.

Bởi vì lỗi sinh ra từ sai lầm của bạn.

Do đó, nói chuyện với một con vịt cao su và cố gắng giải thích cho nó (một con vật vô tri) hiểu đồng nghĩa với việc bạn đang cố gắng hệ thống hóa lại tình huống và đơn giản hóa nó cho chính bạn.


Chúc mừng bạn đã biết cách gỡ lỗi như một lập trình viên chuyên nghiệp


Tuy nhiên chỉ biết cách để gỡ lỗi thì không đủ. Quan trọng nhất là bạn cần phải có phần kiến thức về Java cơ thật vững.

Các công cụ hỗ trợ gỡ lỗi Java chỉ giúp bạn tìm ra chỗ sai, còn tại sao nó sai và sửa sai như thế nào thì đó là việc của bạn.

> Vì thế, mình luôn khuyên các bạn học viên tham gia KHÓA HỌC JAVA bên mình luyện tập căn bản thật tốt, debug thì mở to mắt ra. Không chỉ học trên lớp mà còn phải tự học, tự rèn luyện thật nhiều, tìm cách tạo ra lỗi và hiểu cách chương trình chạy sai.

Bởi vì "BUG EVERY WHERE".

Phần lớn thời gian làm việc của chúng ta là tìm và gỡ lỗi.

Các công việc khác cũng đa phần là lặp đi lặp lại. Bạn sẽ nhanh chóng chán nếu làm mà chẳng có lỗi nào.

Có lỗi đồng nghĩa với bạn đang sai ở chỗ nào đó, sửa được lỗi đồng nghĩa với việc hoàn thiện thêm. Nó có tính thử thách, và thử thách thì luôn kích thích và cảm thấy thỏa mãn khi sửa thành công.

Trên đây là đôi dòng tâm sự về sự nghiệp "Đì Bấc" hi vọng bạn sẽ có thêm một chút kinh nghiệm để gỡ lỗi Java tốt hơn.

Chúc bạn thành công.

> Đọc thêm: Top 10 Plugin hỗ trợ lập trình Java trên Eclipse


---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python

Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate

Lập trình Android Nâng cao

56 giờ
Khóa học Android nâng cao cung cấp kiến thức và kỹ năng chuyên sâu về lập trình Android. Phát triển ứng dụng tiên triến như: Lập trình giao diện tùy biến, xử lý dữ liệu nâng cao
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!