Debug trong IDEA

JAVA 25 SELF
Mức độ , Bài học
Có sẵn

1. Bug

Lập trình viên có tiếng lóng riêng, dù nhiều người cho rằng đó là thuật ngữ kỹ thuật. Dù thế nào, bạn cũng không tránh khỏi việc làm quen với nó và tìm hiểu kỹ lưỡng. Vậy nên hãy bắt đầu làm quen dần.

Một trong những từ đầu tiên mà bạn sẽ gặp là từ bug, từ tiếng Anh bug (bọ). Từ này chỉ lỗi trong chương trình, khi chương trình làm điều gì đó không đúng hoặc không như mong đợi. Hoặc đơn giản là hoạt động một cách kỳ lạ.

Tuy nhiên, nếu lập trình viên cho rằng chương trình dù hoạt động kỳ lạ nhưng đó chính là điều anh ta dự định, thường sẽ nói kiểu “đây không phải bug, đây là feature”. Điều này đã sinh ra vô số meme trên Internet.

Về nguyên tắc, nguyên nhân hoạt động sai có thể là bất kỳ thứ gì: lỗi trong logic chương trình, lỗi gõ, kiến trúc chương trình không đúng, thậm chí cho đến vấn đề của trình biên dịch. Dù thế nào thì lập trình viên cũng cần sửa cả bug thực sự lẫn mọi “thiếu sót” khác trong chương trình.

Lịch sử của từ bug

Câu chuyện phổ biến nhất về nguồn gốc của từ bug là như sau.

Vào tháng 9 năm 1947, các nhà khoa học của Đại học Harvard đang kiểm thử một trong những máy tính đầu tiên — Mark II. Máy tính không hoạt động, và trong quá trình kiểm tra các bảng mạch, họ tìm thấy một con bướm đêm mắc kẹt giữa các tiếp điểm của rơ-le điện cơ.

Con côn trùng được dán bằng băng dính vào nhật ký kỹ thuật và kèm dòng ghi chú kiểu “bug đã được tìm thấy và loại bỏ”.

Người ta cho rằng chính câu chuyện hài hước này đã khởi đầu cho việc dùng từ bug để chỉ lỗi, và từ debug (debug) trở thành đồng nghĩa với việc loại bỏ lỗi.


2. Gỡ lỗi chương trình

Để loại bỏ bug trong các chương trình của mình, lập trình viên sử dụng các chương trình gỡ lỗi (debugger). Một số công cụ này thậm chí có thể gỡ lỗi cả mã máy.

Lập trình viên Java để gỡ lỗi (debugging) chương trình của họ thường dùng IDE. Như Intellij IDEA, Eclipse và Net Beans. IntelliJ IDEA ngày nay là IDE mạnh mẽ nhất, vì vậy chúng ta sẽ xem xét quy trình gỡ lỗi trên ví dụ của IDE này.

Intellij IDEA có thể chạy chương trình của bạn ở hai chế độ:

Chế độ chạy chương trình Biểu tượng trên thanh Phím tắt
Chạy bình thường Shift+F10
Chạy ở chế độ gỡ lỗi Shift+F9

Với chế độ thông thường, bạn đã quen rồi: chương trình sẽ chạy, thực thi và kết thúc. Còn chế độ gỡ lỗi sẽ mang đến cho bạn không ít điều bất ngờ.

Chế độ gỡ lỗi

Chế độ gỡ lỗi cho phép bạn thực thi theo từng bước toàn bộ chương trình. Hoặc nói đúng hơn, theo từng dòng: dòng sau dòng. Khi đó bạn có thể quan sát giá trị của các biến ở mỗi bước (sau khi thực thi mỗi dòng mã). Và thậm chí có thể thay đổi chúng!

Để nắm được tối thiểu nghệ thuật gỡ lỗi chương trình, bạn cần học ba điều:

  • Điểm dừng
  • Thực thi từng bước
  • Xem giá trị biến

3. Điểm dừng (Break Points)

IDE cho phép bạn đặt trong mã các mốc đặc biệt — điểm dừng (break point). Mỗi lần chương trình chạy ở chế độ gỡ lỗi đi đến dòng được đánh dấu là break point, nó sẽ tạm dừng.

Để đặt break point trên một dòng cụ thể, chỉ cần nhấp chuột trong IDEA ở bên trái dòng đó. Ví dụ:

Break Point

Kết quả là dòng sẽ được đánh dấu bằng điểm dừng (break point), và Intellij IDEA sẽ tô sáng nó bằng màu đỏ:

Break Points 2

Nhấp chuột lần nữa trên thanh bên trái mã sẽ gỡ break point đã đặt.

Bạn cũng có thể đặt break point ngay trên dòng hiện tại bằng phím tắt — Ctrl+F8. Nhấn lại Ctrl+F8 trên dòng đã có break point sẽ xóa nó.


4. Chạy chương trình ở chế độ gỡ lỗi (debug)

Nếu chương trình của bạn có ít nhất một điểm dừng, bạn có thể chạy nó ở chế độ gỡ lỗi (Shift+F9 hoặc “biểu tượng con bọ”).

Sau khi chạy ở chế độ gỡ lỗi, chương trình hoạt động như bình thường. Nhưng ngay khi nó đến dòng mã được đánh dấu break point, nó sẽ tạm dừng. Ví dụ:

Running program in debug mode

Ở nửa trên ảnh chụp màn hình, bạn thấy mã chương trình với hai điểm dừng. Chương trình dừng ở dòng 5 — được đánh dấu bằng đường màu xanh. Dòng 5 vẫn chưa được thực thi: chưa có gì được in ra console.

Ở nửa dưới màn hình, bạn thấy các bảng của chế độ gỡ lỗi: bảng Debugger, bảng Console (xuất ra màn hình), cùng bộ nút dành cho chế độ gỡ lỗi.

Bạn có thể tiếp tục chương trình (rời khỏi trạng thái tạm dừng) nếu nhấn nút Resume Program trên bảng ở góc trái dưới (hoặc nhấn phím F9).

Running program in debug mode 3

Nếu nhấn nút đó (hoặc F9), chương trình sẽ tiếp tục chạy cho đến khi gặp điểm dừng tiếp theo hoặc kết thúc. Đây là những gì ta sẽ thấy sau khi nhấn nút:

Running program in debug mode 4

Chương trình đã dừng ở điểm dừng thứ hai, và trên console đã in các từ Xin chào – dấu hiệu cho thấy trong ba dòng xuất ra màn hình thì mới thực thi hai dòng.


5. Thực thi từng bước

Nếu chương trình của bạn đang chạy ở chế độ gỡ lỗi, bạn cũng có thể thực thi nó theo từng bước: một bướcmột dòng. Để thực thi từng bước có hai phím tắt: F7F8; mỗi phím sẽ thực thi dòng mã hiện tại. Nhưng trước hết, bạn cần dừng chương trình bằng break point.

Nếu muốn thực thi chương trình theo từng dòng, bạn cần đặt break point ngay đầu phương thức main() và chạy nó ở chế độ gỡ lỗi.

Khi chương trình dừng, bạn có thể bắt đầu thực thi từng dòng. Mỗi lần nhấn phím F8 – một dòng.

Đây là hình ảnh chương trình của chúng ta sau khi dừng và nhấn phím F8 một lần:

Running program in debug mode. Step-by-step execution

Dòng đầu tiên của phương thức main đã được thực thi, và dòng hiện tại là dòng thứ hai. Bạn cũng có thể thấy ở phần dưới của ảnh chụp màn hình rằng từ Xin chào đã được in ra màn hình.


6. Thực thi từng bước với bước vào phương thức

Nếu chương trình của bạn có các phương thức riêng, và bạn muốn khi gỡ lỗi chương trình không chỉ thực thi từng bước mà còn đi vào bên trong các phương thức đó, để “bước vào phương thức” bạn cần nhấn phím F7 chứ không phải F8.

Giả sử bạn đang thực thi từng bước và hiện dừng ở dòng thứ 4. Nếu bạn nhấn F8, IDEA chỉ đơn giản thực thi dòng thứ tư và chuyển sang dòng thứ năm.

Step-by-step execution with stepping into methods

Nhưng nếu bạn nhấn F7, IDEA sẽ thực thi từng bước phương thức main2():

Step-by-step execution with stepping into methods 2

Rất đơn giản. Nếu bạn không quá quan tâm điều gì xảy ra bên trong phương thức, hãy nhấn F8; nếu quan trọng — nhấn F7 và thực thi từng bước toàn bộ mã của nó.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION