Kỹ thuật Debug trong lập trình C++

Debug là gì ? Tại sao phải Debug ?

Chào các bạn, khi các bạn viết chương trình thường hay có những lỗi xảy ra mà không hề hiển thị trên khung báo lỗi hoặc các bạn muốn xem giá trị các biến, cách thức hoạt động của chương trình bạn viết. Lúc này các bạn cần phải dùng đến chức năng debug.

Vậy, debug là một chức năng cho  phép chúng ta xem được giá trị của các biến và cách hoạt động của chương trình. Từ đó, các bạn có thể điều khiển được code của các bạn.

Bạn sẽ nắm được gì sau bài học này?

Sau bài học này, các bạn sẽ nắm được hai kỹ thuật quan trọng trong lập trình:

Kỹ thuật Debug trong lập trình C++

Kỹ thuật khoanh vùng và sửa lỗi (cái này cực kỳ quan trọng cho các bạn lập trình viên mới bắt đầu)

Kỹ thuật Debug chương trình:

Tôi có một chương trình tính toán cộng trừ nhân chia đơn giản, không chia thành các hàm và thư viện. Tôi dùng môi trường Visual Studio 2013. Source code tôi sẽ để trong phần Source code phía bên dưới bài viết.

Cách đặt Debug:

Để đặt debug các bạn hãy chọn dòng code muốn debug rồi nháy đúp vào thanh dọc màu nâu như trong hình 1. Lúc này dấu Breakpoint màu đỏ xuất hiện. Muốn hủy debug thì nháy đúp một lần nữa vào dấu Breakpoint, các bạn có thể quan sát trong hình 1 bên dưới.

lap-trinh-c

Hình 1 – Cách đặt dấu Debug

Cách chạy debug:

Để chạy một debug, các bạn chọn vào DEBUG rồi chọn Start Debugging hoặc ấn F5 để chạy Debug.

lap-trinh-c-1

Hình 2 – Start debug

Trong khi chạy Debug:

Khi bắt đầu chạy debug, chương tình sẽ nhảy vào nơi chúng ta đặt Breakpoint. Sau khi kiểm tra xong , bạn chọn vào Continue để chạy tới Beakpoint tiếp theo.

lap-trinh-c-2

Hình 3. Tiếp tục trong debug

Kiểm tra giá trị và bảng Watch.

Xem giá trị bằng cách di con trỏ.

Các bạn di con trỏ tới giá trị mà bạn muốn xem, lúc này Visual Studio sẽ hiện giá trị như trong khung đỏ cho các bạn.

lap-trinh-c-3

Hình 4 – Xem giá trị Debug

Xem giá trị bằng bảng Watch:

Các bạn di con trỏ tới giá trị bạn mong muốn rồi click chuột phải để xuất hiện bảng chọn. Sau đó chọn vào chức năng Add Watch.

lap-trinh-c-4

Hình 5 – Thêm giá trị Watch

Đây là giao diện bảng watch hình 6. Bạn có thể xóa các giá trị đã chọn bằng cách ấn phím delete trên bàn phím.

Đồng thời, các bạn có thể thay đổi giá trị khi debug bằng cách nháy đúp vào trong giá trị của biến. Bạn có thể thay đổi bằng cả hai cách xem giá trị.

lap-trinh-c-5

Hình 6 – Thay đổi giá trị Watch

Các kỹ thuật debug này khá cơ bản và dễ làm trong Visual Studio 2013 và những bản khác củng tương tự như vậy, đến đây chắc các bạn đã nắm được các bước cơ bản để chạy Debug một chương trình trong Visual Studio 2013 rồi chứ. Chúng ta sẽ cùng bàn đến phần tiếp theo, phần rất quan trọng mà mọi lập trình viên cần phải nắm được, đó là khi chương trình chúng ta bị lỗi (bug), chúng ta cần nắm được cách thức để khoanh vùng, xác định lỗi nhanh nhất, đó là tiền đề quan trọng để sửa lỗi (fix bug) một chương trình.

Kỹ thuật Khoanh vùng và sửa lỗi trong C++

Debug trong lập trình – Khoanh vùng và sửa lỗi

Để khoanh vùng được một lỗi, chúng ta cần:

  1. Xác định dòng code bị lỗi, nếu ở môi trường Visual Studio thì sẽ hiện trên khung báo lỗi, bạn ấn tổ hợp phím Ctrl + \ + E. Bạn click vào thông báo lỗi, nó sẽ nhảy tới vị trí lỗi của bạn.
  2. Bạn phải đọc và phân tích lỗi đó là lỗi gì. Cách đơn giản nhất để hiểu đó là copy nó và cho lên google translate để dịch rồi tiếp tục search trên google để tìm cách sửa lỗi. Ở bước này nếu bạn sửa lỗi thành công thì không cần phải debug làm chi cho tốt thời gian. Nếu không sửa được thì phải tiến tới bước 3.
  3. Sử dụng kỹ năng phán đoán của mình để xác định lỗi. Thực chất là quay về dòng code lỗi, đọc lại các đoạn code trước và sau nó xem có sai logic không nếu có tiến tới sửa lỗi logic đó. Nếu bước này vẫn thất bại, chuyển tiếp sang bước thứ 4.
  4. Ở bước này, chúng ta bắt đầu mệt mỏi với lỗi nhưng nếu không biết vị trí đặt debug ở đâu thì lại mệt nhân lên gấp trăm lần. Các bạn đọc phần tiếp theo sẽ rõ.

Vị trí đặt dấu Breakpoint

Tại sao phải biết vị trí đặt dấu Breakpoint?

Trong khi khoanh vùng được lỗi, các bạn cần đặt dấu Breakpoint, nhưng các bạn không biết vị trí cần đặt thì sẽ làm cho các bạn tốn rất nhiều thời gian cho việc tìm và sửa lỗi.

Như vậy:

Nếu là câu lệnh so sánh if hoặc if else thì có hai trường hợp là đặt vào thân hàm if nếu muốn biết chương trình chạy ở đâu, cách còn lại là đặt vào điều kiện if để tìm nguyên nhân phát sinh lỗi. Có một điều cần lưu ý là nếu như đặt dấu debug đầu tiên như trong hình thì củng không có tác dụng gì đối với các vòng lặp hay if bởi vì nếu chương trình vào trong các câu lệnh đó thì sẽ vào ngay dấu debug đầu tiên trong câu lệnh

Nếu là vòng lặp  thần thánh thì ta cần đặt ở trong thân hàm để kiểm tra giá trị hoặc vòng lặp tiếp theo nếu là for lồng ghép.

Còn các trường hợp khác, các bạn đặt ở những nơi phát sinh lỗi.

Đối với những nguời có kinh nghiệm làm lâu năm hoặc những bậc anh hùng cao thủ thì họ sẽ đặt debug và nơi họ quan tâm.

Làm thế nào để tìm và sửa lỗi nhanh chóng?

Đây quả thực là một câu hỏi mà rất khó có lời giải đáp cho dân lập trình. Bởi vìtùy và mỗi nguời ở trình độ khác nhau sẽ nhận thức câu hỏi này khác nhau và còn tùy thuộc vào kinh nghiệm làm việc của họ. Nhưng với tôi, để tìm và sửa lôĩ nhanh tôi làm như sau:

Đầu tiên, trước khi bắt tay vào code một ý tưởng tôi đều vẽ ra giấy ý tưởng đó rồi khoanh vùng khả năng cho nó. Kiểu như là chỗ đó thì làm như thế nào cho hợp lí.

Thứ hai, bắt tay vào code thật cẩn thận, code xong chức năng nào chạy kiểm tra.

Thứ 3, hoàn thành chương trình, chạy test nhiều lần để kiểm tra (nếu lỗi đó không làm gián đoạn chương trình nhưng ảnh hướng tới kết quả) , nếu sai phải biết sai như thế nào, ở vị trí nào.

Thứ 4, khi phát sinh lỗi:  Khoanh vùng thật nhanh vào lỗi đó và đặt debug đúng chỗ tránh lòng vòng. Khi phát hiện lỗi nếu là lỗi cấu trúc  thì quay lại nơi bắt đầu là xác định chức năng đó làm như thế nào. Nếu là khác thì dựa vào kết quả sai để sửa lại cho đúng.

Và điều quan trọng nhất, cần phải hiểu rõ mình đang làm gì, dòng code mình có ý nghĩa gì.

Tổng kết:

Trình bày một cách đơn giản nhưng các bạn sẽ nắm bắt được vấn đề các bạn cần làm gì.

Debug là một kỹ thuật đơn giản nhưng để làm chủ được điều đó cần một thời gian lâu dài mới có thể đạt được. Khi đạt được kỹ năng debug, bạn không cần phải lo lắng về lỗi ẩn và lỗi phát sinh trong chương trình.

Chúc các bạn sớm làm chủ được kỹ năng này.

Kỹ thuật Debug trong lập trình C++
5 (100%) 13 votes

Add Comment