Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Lập trình C | Cơ bản về DEBUG khi lập trình C...

  1. #1
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Mặc định Lập trình C | Cơ bản về DEBUG khi lập trình C...

    Tôi thấy có rất nhiều bạn khó khăn khi mới học lập trình, và câu hỏi đưa ra thường xuyên là "Không biết sai ở đâu?" . Vì vậy tôi viết bài này để các bạn hiểu về cách debug và tìm ra lỗi trong chương trình, từ đó sẽ sửa chữa chương trình dễ dàng hơn.

    GIỚI THIỆU VỀ DEBUG - LĂNG XÊ DEBUG

    Hầu hết khi học lập trình, ai cũng bỏ qua một kỹ năng rất quan trọng, đó là DEBUG. Tôi còn nhớ khi lần đầu đọc về ASM (Peter Norton, Nhập môn ASSEMBLER) thì cái cần học đầu tiên không phải là ASM mà là DEBUG.

    Trong các môi trường phát triển, tất cả đều cung cấp cho các bạn các công cụ debug rất hữu ích. Các công cụ này giúp các bạn biết được, tại 1 thời điểm thì giá trị của biến nào là bao nhiêu, giá trị của thanh ghi nào là bao nhiêu, các bạn cũng biết được chương trình đang chạy ở hàm nào, và được gọi từ hàm nào .... Rất nhiều thông tin giúp các bạn có thể tìm ra lỗi của chương trình mình một cách nhanh chóng nhất.

    Khi bắt đầu học lập trình, các bạn thường chạy bằng tay 1 chương trình nho nhỏ, tính kết quả sau mỗi lệnh, ... ngày tôi gọi đó là "chạy chậm" (vì chậm hơn máy tính nhiều ), bây giờ thì nó hiện đại hơn và được gọi là DEBUG.
    Với các công cụ như trên đã giới thiệu trên, chúng ta cũng có thể chạy chương trình của chúng ta theo từng bước, từng lệnh 1 và quan sát kết quả sau mỗi lệnh chạy.

    CỤ THỂ HÓA VẤN ĐỀ - DEBUG NHƯ THẾ NÀO?

    Các môi trường đều hỗ trợ debug. Tuy nhiên phím nóng lại rất khác nhau, vì thế tôi sẽ cố gắng mình họa trong 2 môi trường TC3.0 và VC++ 6.0 đồng thời đưa ra các thuật để các bạn có thể dễ dàng tìm thấy trong các môi trường khác (có thể tìm thấy trong menu - Debug). Thông tin sẽ được đưa theo format sau: Thuật ngữ (TC hotkey/VC++ hotkey). Phím nóng ở trong TC30 hoàn toàn giống với TP70 (do cùng của Borland cả mà).

    Việc đầu tiên cần làm để debug 1 chương trình là ... chạy nó ở chế độ debug. Các bạn có thể chạy từng lệnh từng lệnh 1 bằng chức năng Step Into (F7/F11), như vậy các bạn sẽ thấy trên màn hình soạn thảo 1 dấu hiệu dễ nhận biết được rằng con trỏ lệnh đang ở lệnh nào (tô xanh với TC và mũi tên màu vàng với VC++). Sau khi thực thi Step Into thì con trỏ lệnh sẽ chạy qua lệnh đó và tùy thuộc vào ngữ cảnh để chạy đến vị trí tiếp theo, có thể là nhảy, có thể là tuần tự hay gọi chương trình con ....

    Nhưng có 1 vấn đề nảy sinh, chương trình của bạn dài cỡ 1001 dòng, và chúng ta muốn debug các lệnh từ dòng 800 đến 850 chẳng hạn. Chẳng nhẽ ngồi ấn F11 cho đến khi nào con trỏ lệnh chạy đến dòng 800? Mọi việc đơn giản hơn nhiều với chức năng Run to cursor(F4/Ctrl+F10). Điều này có nghĩa là nếu như bạn muốn con trỏ lệnh dừng ở vị trí dòng 800, bạn chỉ cần đưa con trỏ soạn thảo đến dòng 800 và sử dụng Run to cursor. Lúc đó máy tính sẽ chạy chương trình và "nếu" như chương trình chạy đến dòng 800 thì nó sẽ dừng lại, và chúng ta tiếp tục debug, còn nếu không thì ... thôi.

    Giải quyết được vấn đề trên, ta lại đối mặt với 1 thách thức nữa. Giả sử chúng ta cần debug ở 2 chỗ (dòng 800 và 900 chẳng hạn), vậy thì nếu dùng Run to cursor thì sẽ để con trỏ soạn thảo ở đâu? . Trong trường hợp này Run to cursor tỏ ra vô tác dụng, lúc này chúng ta cần đến 1 chức năng cơ động hơn, đó là các Break point(Ctrl+F8/F9), đây là các điểm dừng của chương trình. Trong 1 chương trình chúng ta có thể có nhiều Break point, và mỗi khi chạy chương trình mà máy tính gặp Break point thì máy tính sẽ dừng lại và chúng ta tiếp tục debug.

    Chức năng cuối cùng về các kiểu chạy lệnh mà tôi giới thiệu là Step Over(F8/F10). Chức năng này cho phép ta chạy qua 1 chương trình con mà không vào trong chúng. Nói như vậy có vẻ khó hiểu. Đơng giản là như thế này: Trong quá trình debug, ta đã khẳng định được 100% là hàm ABC của ta đã đúng. Thế nhưng ta luôn gặp lời gọi hàm này, mỗi lần như thế lại phải Step Into chán chê mê mỏi để nhảy vào hàm rồi mãi mới ra khỏi hàm. Khi con trỏ lệnh đứng ở lời gọi hàm, thay vì dùng Step Into ta dùng Step Over thì máy tính sẽ giả vờ như hàm này là 1 lệnh, và nó chạy qua hàm luôn mà không vào trong hàm đó. Như thế ta đỡ mất thời gian hơn.

    Trên đây tôi đã đưa ra các chức năng để điều khiển con trỏ lệnh khi debug. Nếu sử dụng thành thạo các chức năng này, tin rằng chúng ta có thể điều khiển chương trình theo ý muốn.

    Bài sau tôi sẽ viết về các chức năng cho phép ta xem giá trị của biến, stack, thanh ghi, ...
    Đã được chỉnh sửa lần cuối bởi Tarzan : 01-11-2006 lúc 02:25 PM.

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Mặc định Các chức năng xem giá trị của ... khi debug

    Watch (Alt+F7/Alt+3)

    Đây là cửa sổ dùng để hiện giá trị các biến. Khi mở cửa sổ này ra, các bạn chỉ việc thêm các biến vào bằng cách gõ tên chúng, và chúng ta sẽ thấy giá trị của nó ở ngay bên cạnh. Mỗi khi bạn chạy 1 lệnh, giá trị sẽ thay đổi theo tùy thuộc lệnh vừa chạy.

    Call Stack (Không nhớ / Alt+7)

    Cửa sổ này hiển thị các thông tin về trình tự gọi hàm của chương trình. Hàm nằm ở đáy luôn là hàm main, hàm nằm trên top luôn là hàm chưa con trỏ lệnh.

    Register (Không nhớ / Alt+5)

    Cửa sổ này hiển thị giá trị ở các thanh ghi.

    Đây là các cửa sổ thông thường, còn 1 số cửa sổ khác nhưng theo tôi thấy không cần post lên ở đây.

    Còn 1 chức năng nữa, đó là chức năng sửa giá trị của biến trong thời gian chạy. Chẳng hạn sau khi chạy xong 1 lệnh, theo đúng như chúng ta tính toán thì x phải bằng 2, nhưng vì lí do nào đó khiến x = 5. Như vậy chúng ta khó có thể test phần sau, lúc đó chúng ta có thể sửa lại giá trị của x = 2 để test ngay phần sau nhưng tôi nghĩ chức năng này ít dùng vì thường ta sẽ bug luôn phần trên trước.

    Chúc mọi người thành công.

    COMPLETE.

  3. #3
    Ngày gia nhập
    03 2007
    Nơi ở
    Việt Nam
    Bài viết
    8

    bạn ơi tôi vẫn chưa rõ lắm, bạn chỉ nêu ra các câu lện thôi, mà mình muốn biết về làm sao để xem nó chạy kìa, nếu dùng bordland c thì xem như thế nào và visual c++ cũng vậy (bạn có thể viết một chương trình ngắn và minh họa cho minh cách làm nó chạy nha bạn). Minh nghe nói debug nay quan trọng lắm nhưng mà chưa biết chạy sao cả, chẳng lẽ phải vào debug của dos hả bạn.

  4. #4
    Ngày gia nhập
    12 2008
    Bài viết
    198

    yêu cầu mod C chuyển bài này qua box hướng dẫn đi

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    3

    Thank! dù đọc chả hiểu gì!

  6. #6
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Mặc định Lập trình C | Cơ bản về DEBUG khi lập trình C...

    Nhiệt timhf post bài dài như thế thì cũng đáng cảm ơn 1 tiếng chứ. Thank you !

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Heaven
    Bài viết
    277

    Cho hỏi nút thank ở đấu vây?
    Cảm ơn mọi người nhièu nha

  8. #8
    Ngày gia nhập
    02 2009
    Bài viết
    56

    cảm ơn bạn .Nếu bạn có thể post luôn hình ảnh minh họa thì tốt biết mấy,người đọc sẽ dễ hiểu hơn.

Các đề tài tương tự

  1. Lỗi debug
    Gửi bởi trungphua trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 24-10-2012, 11:19 PM
  2. Lỗi khi debug chương trình C#: "Visual Studio cannot start debugging because the debug target"
    Gửi bởi Rongcon.com.vn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 09-05-2012, 08:46 PM
  3. [VS 2010]Khi debug bị lỗi không cho chạy debug trước đó
    Gửi bởi buxu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 08-04-2012, 04:25 PM
  4. lỗi khi chạy debug | fatal error LNK1104: cannot open file "Debug/vd1.exe"
    Gửi bởi duytuyen26 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 05-04-2012, 08:51 PM
  5. #ifdef DEBUG.......#endif câu lệnh debug
    Gửi bởi RadiRadic trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 07-07-2009, 10:58 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn