Hướng dẫn debug trong visual studio code c++

Bug là gì?

  • Bugs 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 hoặc thực thi sai.
  • Bugs luôn tiềm ẩn ở mọi nơi, và ta không thể lường trước được mọi tình huống có thể xảy ra mà chỉ có thể cố gắng làm giảm nó đến mức thấp nhất có thể tùy vào khả năng của ta tại thời điểm phát triển và bảo trì ứng dụng.
  • Debug là quá trình tìm kiếm ra lỗi hay nguyên nhân gây ra lỗi (bug ở đâu) để có hướng sửa lỗi (fix bug). Việc kiểm soát lỗi của rất nhiều các dòng code là việc không hề đơn giản với những người lập trình viên chưa có nhiều kinh nghiệm.
  • Chuyện xảy ra lỗi trong hàng nghìn dòng lệnh đó là chuyện bình thường đối với bất cứ 1 người làm lập trình nào. Chương trình có thể chạy không đúng ý người lập trình, hoặc chạy sai chức năng nó được quy định, gây cho chương trình bị đánh giá kém chất lượng. Vậy khi bị lỗi thì các lập trình viên phải debug để fix lỗi giúp cho chương trình (program) chạy tốt.

Mục đích của việc debug

  • Mục đích của Debug không chỉ là để loại bỏ lỗi (error) khỏi chương trình mà quan trọng hơn còn để giúp lập trình viên hiểu rõ hơn sự thực thi của chương trình. Một lập trình viên không có khả năng Debug hiệu quả thì cũng giống như bị mù vậy.

Các phương pháp debug

  • Debugging Tool – dùng công cụ để Debug – là phương pháp Debug đi sâu vào source code nhất. Thường thì chúng ta gọi những Debugging Tool này là Debugger. Những Debugger phần mềm thông dụng là Microsoft Visual Studio Debugger , GNU Debugger . Ngoài ra còn có những Debugger phần cứng được thiết kế kèm cho các hệ thống nhúng (Embedded System) bởi các thiết kế nhúng không phải là những thiết kế mang tính mục đích chung (General-purpose) mà thường được thiết kế trên các platform riêng biệt phục vụ các ứng ứng dụng riêng biệt nên cũng cần những Debugger đặc thù đi kèm.
  • Printlining: đơn giản là bạn thêm vào source code của bạn những dòng lệnh để in ra những thông tin mà bạn cần theo dõi trong quá trình thực thi. Chẳng hạn nếu bạn dùng Arduino IDE thì bạn sẽ không có Debugger và cách Debug phù hợp nhất là bạn dùng Serial.print().
  • Logging: tạo ra một biểu mẫu để ghi (log) lại những thông tin sau khi chương trình thực thi. Phân tích nguyên nhân lỗi dựa trên những thông tin này.
  • Ngoài ra thì còn một phương pháp mà cá nhân mình cho là rất hiệu quả đó là phương pháp – Nhờ người khác debug – là việc bạn vác đoạn code ra nhờ người có kinh nghiệm hơn debug dùm.

Mẹo viết code giúp chúng ta soát lỗi nhanh

  • Dùng comment (chú thích) sau khi viết xong 1 đoạn code về 1 phần nào đó để sau này dễ tìm và sửa.
  • Đặt tên các hàm các biến có ý nghĩa để dễ kiểm soát và tìm lỗi.
  • Hoặc có thể sử dụng Breakpoints để rà soát xem phần mềm của bạn chạy đến vị trí nào của code và đến đó có đúng không.
  • Đừng bỏ qua các Error Message nó sẽ giúp chúng ta có thể tìm ra số dòng code và sửa rất nhanh.

Hướng dẫn debug trong visual studio code c++

  • Software engineer phát triển bản thân như thế nào?
  • Hướng dẫn cách viết clean code cho lập trình viên (P1)
  • Những sự thật ít người biết tới về nghề lập trình

Khi học lập trình chắc hẳn có rất nhiều bạn gặp phải vấn đề là code chạy nhưng không ra kết quả không như mong muốn nhỉ??? Để giải quyết vấn đề này thì các bạn thường chạy lại code trong đầu hoặc viết ra giấy mà quên đi mất công cụ hữu ích là debug được tích hợp sẵn trong các IDE. Vậy hôm nay mình xin được hướng dẫn các bạn cách debug trong DevC++.

Xác định vấn đề

Debug (gỡ rối) là quá trình tìm ra lỗi khiến chương trình máy tính hay hệ thống không hoạt động đúng.

Đầu tiên chúng ta cần phải xác định được DevC++ của bạn đang là 32bit hay là 64bit, sau khi xác định được ta chọn bản 64bit-Debug hoặc 32bit-Debug

Hướng dẫn debug trong visual studio code c++

Tiếp tới ta nhìn các chỉ số đánh line code, và nhấn chọn điểm bắt đầu chạy (breakpoint), ví dụ dưới đây mình chọn line 4 minh họa cho cả bài viết:

Hướng dẫn debug trong visual studio code c++

Bước tiếp theo ta nhìn xuống dưới chọn debug (hoặc nhấn F5) để mở cửa sổ quản lí Debug

Hướng dẫn debug trong visual studio code c++

Mình xin được giải thích từng chức năng chính như sau:

  • Debug: nhấn để bắt đầu quá trình debug
  • Add watch: có chức năng là thêm các biến hoặc các biểu thức mà chúng ta muốn theo dõi trong suốt quá trình chúng thay đổi ra sao.
    • Có 2 cách để thêm là
      • Cách 1: nhấn add watch sẽ hiện ra 1 dòng để cho ta nhập biến và biểu thức
      • Cách 2: các bạn có thể bôi đen biến hoặc biểu thức rồi nhấn add watch
    • Sau khi thêm các bạn chọn cửa sổ debug như sau để theo rõi giá trị của biến được add watch
      • Hướng dẫn debug trong visual studio code c++
      • Ở đây mình add các biến và biểu thức: n, n<2, i, sqrt(n), i<=sqrt(n), n%i==0.
  • Next line: Nhảy dòng tiếp theo, chúng ta cần phải đặc biệt lưu ý ở chức năng này vì nó nhảy tới dòng tiếp theo nên khi chúng ta vô tình code dòng 8 9 10 gộp vào 1 dòng thì nó sẽ nhảy luôn xuống dòng tiếp theo mà không lặp đi lặp lại quá trình của vòng for nữa.
  • Stop execution: dừng quá trình debug
  • Into function: có chức năng truy cập vào hàm, ví dụ nếu mình đặt ví trí breakpoint ở dòng cout<<snt(17); thì khi nhấn into function ta sẽ truy cập vào được hàm số nguyên tố, nếu không ta nhấn next line nó sẽ nhảy luôn xuống dòng dưới mà không truy cập vào hàm kiểm tra số nguyên tố.
  • Skip function: Thoát khỏi hàm đang chạy. (Ngược lại với into function)

Sau khi nắm rõ được các chức năng của từng button trong debug rồi, và ở trên mình cũng đã add các biến và biểu thức mà chúng ta cần theo rõi quá trình debug, giờ chúng ta chỉ cần nhấn next next và next để theo rõi sự thay đổi của các biến và biểu thức qua từng lệnh được thực thi. Khi chúng ta theo dõi quá trình thay đổi của các biến và biểu thức như thế thì sẽ biết được mình sai ở đâu, từ đó có thể tìm được hướng giải quyết.

Tổng kết

Debug là một khâu rất quan trọng mà mỗi lập trình viên đều phải biết, đặc biệt là các bạn newbie khi học C++ hay bất kì ngôn ngữ nào khác cũng nên tìm hiểu cách debug mà IDE có sẵn để một phần giảm tải việc chạy code trong đầu, ra giấy cũng như không hiểu code của mình chạy được nhưng mà sai ở đâu.

Ở trên mình đã trình bày cụ thể các debug trong DevC++, các bạn chỉ cần nhớ chọn cho đúng bản chạy là 64bit-debug || 32bit-debug nếu chọn sai thì khi debug nó sẽ thoát khỏi DevC++. Và tiếp tới là xác định các biến + các biểu thức có thể ảnh hưởng tới kết quả bài toán để add watch và đừng quên mở tap Debug để xem kết quả thay đổi của chúng sau mỗi lần nhấn next nhé!! Các bạn cũng nên chú ý ở những câu lệnh nhập dữ liệu từ bàn phím vì khi trỏ tới câu lệnh nhập ta phải tap qua màn hình console để nhập dữ liệu và đồng thời sau mỗi câu lệnh in nó cũng sẽ in ở màn hình console.