
Hướng dẫn thực hành tuần 2 - Nhập môn lập trình Lớp 07DB_A/B
GVHDTH: Nguyễn Hải Minh 1
Người soạn: Nguyễn Hải Minh
Email: nhminh@fit.hcmuns.edu.vn
CHỦ ĐỀ: DEBUG TRÊN VC++ 6.0
---oOo---
I. GIỚI THIỆU
Một chương trình được biên dịch thành công không chắc chạy đúng theo logic.
Ví dụ chương trình giải phương trình bậc nhất như sau:
Bấm F7 để dịch chương trình, trình biên dịch thông báo không có lỗi:
Nhưng khi chạy với a = 2, b = 1, chương trình cho kết quả sai !!!

Hướng dẫn thực hành tuần 2 - Nhập môn lập trình Lớp 07DB_A/B
GVHDTH: Nguyễn Hải Minh 2
Tệ hơn, chương trình bị dừng đột ngột khi ta nhập a = 0, b = 1 ?!!
ª
Giải pháp: theo dõi từng dòng code để tìm ra dòng chứa lỗi sai (lỗi logic) =>
Phương pháp này gọi là DEBUG
II. CÁC THAO TÁC ĐỂ DEBUG MỘT CHƯƠNG TRÌNH
1. Debug từ dòng code thứ 1 đến dòng code cuối cùng
#
Bước 1: Bấm F7 để dịch chương trình
#
Bước 2: Nếu chương trình biên dịch thành công (không có lỗi), bấm F10 để
bắt đầu Debug. Mũi tên màu vàng xuất hiện trước dòng code đang theo dõi

Hướng dẫn thực hành tuần 2 - Nhập môn lập trình Lớp 07DB_A/B
GVHDTH: Nguyễn Hải Minh 3
#
Bước 3: Bấm tiếp F10 để chuyển sang dòng code tiếp theo (bỏ qua dòng
khai báo biến), mũi tên màu vàng di chuyển xuống tương ứng.
* Lưu ý: ở cửa sổ Context đã xuất hiện 3 biến a, b, x và giá trị hiện thời của
chúng.

Hướng dẫn thực hành tuần 2 - Nhập môn lập trình Lớp 07DB_A/B
GVHDTH: Nguyễn Hải Minh 4
#
Bước 4: Bấm tiếp F10, câu lệnh printf thực hiện xong, mũi tên vàng di
chuyển xuống hàm scanf, màn hình xuất ra chuỗi tương ứng:
#
Bước 5: Bấm tiếp F10, câu lệnh scanf thực hiện xong, chương trình dừng lại
chờ người dùng nhập vào 2 số a, b mới chuyển sang dòng code tiếp theo
* Lưu ý: Sau khi nhập xong a, b, giá trị 2 biến này trong cửa sổ Context thay đổi
theo.

Hướng dẫn thực hành tuần 2 - Nhập môn lập trình Lớp 07DB_A/B
GVHDTH: Nguyễn Hải Minh 5
#
Bước 6: Bấm tiếp F10, dòng x = (-b)/a thực hiện xong, kết quả biến x
thay đổi trong cửa sổ Context:
) Rõ ràng chính câu lệnh x = (-b)/a đã làm chương trình chạy sai logic. Tìm
hiểu kỹ dòng code này, ta sẽ phát hiện được nguyên nhân chính là phép chia (-b)/a
đã được làm tròn thành số nguyên:
(-1)/2 = -0.5 làm tròn thành 0
) Cách giải quyết: ép kiểu a hoặc b thành số thực và thay khai báo x thành
khai báo kiểu số thực, đồng thời sửa đặc tả biến x trong câu lệnh printf cuối cùng
) Dịch lại chương trình (F7) và chạy (Ctrl+F5), chương trình đã cho kết quả
đúng:
float x;
x = (float)(-b)/a; //Hoặc x = (-b)/float(a);
printf("Nghiem cua phuong trinh %ix + %i = 0 la: %f\n",a,b,x);

