Debug file .cpp không dùng IDE

Chào mọi người ^^ Khi nay em toàn debug bằng các IDE có sẵn nhưng nay em muốn tập debug ra màn hình một file .cpp có trước mà không dùng IDE thì làm như thế nào ạ ^^ mong mọi người chỉ giúp em ^^ em cảm ơn nhiều ạ xD

Ý bạn là gì nhỉ mình không hiểu lắm ?

Là code bằng notepad++ chạy bằng cmd và debug riêng, không dùng IDE tích hợp đó bạn ^^

Download gdb để biết thêm chi tiết.

2 Likes

@@! Nếu bạn build và chạy được bằng CMD thì debug cũng được tuy nhiên không như bạn nghĩ đâu. Dùng IDE cho tiện. @@!

1 Like

Mình nghe nói debug như vậy khó hơn :)) nhưng mà lại được cái sau này debug nhanh hơn khi input lớn :’(

Theo ý kiến cá nhân của mình thì debug bằng các công cụ thường là để tìm hiểu code nhiều hơn là sửa lỗi. (Một khi phải dùng tool để debug là khi mà chất lượng code gỉam).
Theo cá nhân mình thì khi code thường ngay từ khâu thiết kế đã hạn chế các lỗi phát sinh,
VD : Bạn có một tập các từ khóa ứng với nó là các đối tượng


struct *creatétruct(char *); // Hàm tạo các đối tượng ứng với từ khóa chuyêng vào.
// Sinh các cấu trúc hình học.

thì thay vì để kiểu string thường sẽ dùng kiểu enum khi đó nó giới hạn các biến được truyền vào và bạn không thể tạo 1 struct không thước trong các kiểu đã được định nghăi.

sau đó trrong qúa trình code các hàm thì cơ bản các lỗi trong mội bô đã bị loại bỏ.

VD hàm chia

float chia(float a, float b) {
return a / b; // Chia 0.
}

// Khi đó cần kiểm tra b == 0 lúc gọi hàm.

Tiếp là các lỗi giao tiếp khi bạn có nhièu hàm và đối hàm này là kết qủa hàm khác thì việc test module đảm bải các hàm trả về kiểu dữ liệu trong phạm vi cho phép các module làm việc đúng.

Nếu có lỗi thì thường bạn có thể xác định nhanh lỗi do module nào và cô lập nó để kiểm tra riêng.
Việc debug đôi khi không thể phát hiện một số lỗi do tối ưu khi compile hay các lỗi thời gian thực.

1 Like

Một số lời khuyên cũng như kinh nghiệm của mình trong việc debug mà không dùng debugger nhé

  • Trước tiên bạn phải nắm vững được ngôn ngữ sử dụng vì đôi khi lỗi không nằm ở thuật toán mà nằm ở tính chất của ngôn ngữ, nếu không nắm rõ thì sẽ không hiểu vì sao nó bị vậy.
  • Phải hiểu rõ được thuật toán của mình và mình đang làm ở bước nào trong cái thuật toán đó, nếu không biết mình đang đứng ở đâu, đã là được gì và cần làm gì tiếp theo, thì sẽ không biết được kết quả hiện tại mà chương trình tính được là đúng hay sai, có phù hợp với yêu cầu của mình hay không
  • Code phải tường minh, đặc biệt là các công thức, biểu thức (tất nhiên), tốt nhất là nên có chú thích giải thích những cái đó tính gì, ý nghĩa các biến, vì khi như vậy, trong trường hợp bạn cần debug, từ giá trị hiện có của tụi nó, bạn có thể tự tính kết quả và so sánh với chương trình để biết đúng hay sai và sai là sai ở đâu.
  • Khi debug, việc đầu tiên là khoanh vùng được đoạn lỗi đầu tiên, để làm được điều này, bạn có thể xuất ra giá trị sau mỗi bước, ví dụ nhập vào lưu đúng hay chưa (nhất là với nhập xuất chuỗi), sau khi sort lại thì thứ tự sort có đúng như mình yêu cầu hay không, … sau bước tính toán đó thì các kết quả số thực có bị sai số gì quá lớn hay không, …
  • Bạn phải có khả năng tự tính toán cao (ít nhất là so với yêu cầu của bài toán bạn đang làm), vì muốn biết nó đúng hay sai, tự bạn phải tính được kết quả để so sánh, nếu bạn mà còn tính sai thì sẽ không còn gì để nói.
  • Lưu ý các trường hợp đặc biệt và trường hợp biên, các bài toán cơ sở nhất là khi bạn dùng đệ quy
  • Phải thật cẩn thận với đệ quy, vì debug kiểu này gặp đệ quy rất khó kiểm soát, tốt nhất là khi debug đệ quy, phải xuất rõ ra đang gọi đến bước nào,trạng thái là gì.
  • Trong trường hợp bạn phải xuất nhiều dữ liệu cùng 1 lúc và các dòng dữ liệu này có cùng format thì nên dùng một số các kí tự đặt biệt trước một số dòng để đánh dấu đó là dữ liệu của đoạn nào. (Ví dụ đệ quy, dùng “@@” để đánh dấu các dữ liệu xuất khi vừa vào hàm đệ quy và “##” để xuất lại dữ liệu sau khi thực hiện xong hàm đệ quy đó, cũng có thể kèm theo là chỉ số bước gọi), hoặc là một cái id nào đó theo thói quen của bạn…
  • Luôn chuẩn bị sẵn sàng 1 IDE có debugger tốt để quay lại cách truyền thống trong trường hợp bạn tốn quá nhiều thời gian nhưng vẫn chưa tìm ra được vấn đề
1 Like

Hỏi thật ông chủ top là khi ông làm ông có quan tâm thời gian không vậy ?
Như tôi là giờ tôi chỉ ước có cái tool mình nghĩ là nó sinh code thôi.

1 Like

Cách đây mấy hôm cũng có viết cái tips debug hêm dùng IDE. Cơ mà mình xài LLDB chớ ko phải GDB.

Share ae đọc chơi :smiley: https://github.com/huytd/til/blob/master/misc/lldb-debug-gcc.md

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?