Các bước sửa lỗi: - Khi biên dịch chương trình, màn hình hiển thị thông báo lỗi, bấm phím ENTER để xuất hiện cửa sổ mô tả lỗi.. Thực thi chương trình: Khi chương trình không còn lỗi, bấm
Trang 1HƯỚNG DẪN DEBUG TRÊN BC 3.1
I Biên dịch, thực thi chương trình:
1 Biên dịch chương trình:
Mục đích: kiểm tra chương trình còn lỗi hay không và sửa lỗi(nếu có
lỗi) để bảo đảm chương trình thực thi được
Thao tác: bấm phím F9 hoặc Atl + F9 hoặc chọn menu Compile
Compile
Kết quả:
Chương trình không còn lỗi sẽ hiển thị thông báo sau:
Chương trình còn lỗi sẽ hiển thị thông báo sau:
Trang 22 Các bước sửa lỗi:
- Khi biên dịch chương trình, màn hình hiển thị thông báo lỗi, bấm
phím ENTER để xuất hiện cửa sổ mô tả lỗi
- Dùng phím mũi tên lên, xuống để duyệt lên xuống và xem mô tả lỗi Khi xem mô tả lỗi, chú ý vệt sáng trên vùng soạn thảo, thông thường
vệt sáng sẽ thông báo vị trí lỗi (có thể ngay tại dòng hoặc trước hoặc
dòng sau đó 1 dòng)
- Một số lỗi thường gặp và một số cách khắc phục sẽ được mô tả trong phần II
3 Thực thi chương trình:
Khi chương trình không còn lỗi, bấm tổ hợp phím Ctrl + F9 hoặc chọn menu Run Run để thực thi chương trình
Trang 3II Một số lỗi thường gặp:
1 Statement missing ;
Mô tả: thiếu dấu chấm phẩy “;” khi kết thúc câu lệnh
Khắc phục: bổ sung thêm dấu chấm phẩy “;” vào cuối câu lệnh
Ví dụ:
Sai:
int a scanf(“%i”,&a) Sửa thành:
int a;
scanf(“%i”,&a);
2 Compound statement missing }
Mô tả: thiếu dấu “}” khi kết thúc khối lệnh hoặc hàm
Khắc phục: thêm dấu “}” vào tương ứng
Ví dụ:
Sai:
void main() {
int a;
scanf(“%i”, &a);
Sửa thành:
void main() {
int a;
scanf(“%i”, &a);
}
3 Unexpected }
Mô tả: thiếu dấu “{” khi bắt đầu khối lệnh hoặc hàm hay dư dấu “}” Khắc phục: kiểm tra xem có thiếu dấu “{” hoặc dư dấu “}” và sửa lại
tương ứng
Trang 4Ví dụ:
Sai:
void main() {
int a;
scanf(“%i”, &a);
} }
Sửa thành:
void main() {
int a;
scanf(“%i”, &a);
}
4 Misplaced else
Mô tả: dấu chấm phẩy “;” được đặt sau phát biểu if hoặc khối lệnh trong
phát biểu if không được đặt trong cặp dấu “{}” và tiếp theo đó là phát biểu else
Khắc phục: tìm và bỏ dấu chấm phẩy “;” sau phát biểu if hoặc đưa khối
lệnh sau phát biểu if vào cặp dấu “{}” tương ứng
Ví dụ:
Sai:
if(a<0);
printf(“la so am\n”);
else
if(a%2==0)
a /=2;
a++;
else
a ;
Sửa thành:
if(a<0)
printf(“la so am\n”);
else
if(a%2==0) {
Trang 5a /=2;
a++;
} else
a ;
5 For statement missing ;
Mô tả: không dùng dấu chấm phẩy “;” để ngăn các thành phần (3 thành
phần) trong cú pháp vòng lặp for (phải có đủ 2 dấu chấm phẩy “;”)
Khắc phục: kiểm tra lại cho đúng cú pháp
for(<biểu thức khởi tạo>; <biểu thức điều kiện>; <biểu thức tăng giảm>) Trong các biểu thức nếu có nhiều biểu thức con thì mỗi biểu thức con cách nhau bởi dấu phẩy “,”
Ví dụ:
Sai:
for(int i=0, i<5; i++)
printf(“%i”,i);
Sửa thành:
for(int i=0; i<5; I++)
printf(“%i”,i);
6 Function call missing )
Mô tả: thiếu dấu phẩy “,” ngăn cách giữa phần định dạng và danh sách các
biến trong hàm printf , scanf
Khắc phục: thêm dấu phẩy “,” ngăn cách giữa phần định dạng và danh sách
các biến
Ví dụ:
Sai:
scanf(“%d”&a);
printf(“%d”a);
Sửa thành:
scanf(“%d”, &a);
printf(“%d”, a);
7 Declaration terminated incorrectly
Trang 6Mô tả: khai báo tên biến trùng với tên hang đã được định nghĩa trước Khắc phục: đổi tên biến
Ví dụ:
Sai:
#include<math.h>
void main() {
int M_PI;
} Sửa thành:
#include<math.h>
void main() {
int m_SoPi;
}
Nguyên nhân: hằng số M_PI đã được khai báo trong thư viện math.h
8 Multiple declaration for ‘<tên_biến>’
Mô tả: khai báo trùng tên biến hoặc khai báo 1 biến nhiều lần
Khắc phục: kiểm tra đổi tên biến khác hoặc bỏ bớt các khai báo biến trùng
nhau
Ví dụ:
Sai:
int i;
for(int i =0; i<5; i++)
printf(“%d”, i);
Sửa thành:
int i;
for(i =0; i<5; i++)
printf(“%d”, i);
9 Undefined symbol ‘<tên_biến>’
Mô tả: sử dụng biến chưa khai báo
Khắc phục: khai báo biến trước khi sử dụng
Ví dụ:
Trang 7Sai:
scanf(“%i”, &a);
Sửa thành:
int a;
scanf(“%i”, &a);
10 Declaration syntax error
Mô tả: thiếu dấu chấm phẩy “;” sau khi khai báo biến
Khắc phục: thêm dấu chấm phẩy “;” sau khi khai báo biến
Ví dụ:
Sai:
int a Sửa thành:
int a;
11 Function ‘<tên_hàm>’ should have a prototype
Mô tả: thiếu khai báo thư viện nếu sử dụng hàm thư viện hoặc chưa khai
báo nguyên mẫu hàm, gọi sai tên hàm
Khắc phục: kiểm tra khai báo thư viện, khai báo nguyên mẫu hàm hoặc tên
hàm
Ví dụ:
Sai:
#include<conio.h>
void main() {
printf(“Hello\n”);
Getch();
} Sửa thành:
#include<stdio.h>
#include<conio.h>
void main() {
printf(“Hello\n”);
getch();
}
Trang 8Nguyên nhân: hàm printf được khai báo trong thư viện stdio.h và gọi sai
tên hàm getch trong thư viện conio.h
12 Possibly incorrect assignment
Mô tả: dùng sai kí hiệu phép toán quan hệ
Khắc phục: sử dụng các kí hiệu phép toán quan hệ
Ví dụ:
Sai if(a=0)
printf(“a bang khong”);
Sửa thành:
if(a==0)
printf(“a bang khong”);
13 Code has no effect
Mô tả: dùng kí hiệu phép toán quan hệ cho phép gán
Khắc phục: dùng kí hiệu phép toán số học
Ví dụ:
Sai:
a == 1;
Sửa thành:
a = 1;
III Hướng dẫn Debug:
1 Vì sao phải Debug:
Dù cho chương trình không còn lỗi nhưng khi thực thi vần có thể cho kết quả sai, một số nguyên nhân:
- Định dạng nhập xuất hoặc sai kiểu dữ liệu
- Điều kiện dừng sai
- Thuật toán sai hoặc thiếu trường hợp…
2 Các thao tác Debug:
- Bấm phím F7 hoặc F8 để chạy từng bước (chương trình không còn lỗi biên dịch)
F7: đi từng lệnh của hàm con nếu có gọi hàm
Trang 9 F8: không đi từng lệnh của hàm con mà chỉ trả về kết quả của
hàm con
Quan sát vệt sáng để biết chương trình thực thi đến đâu
- Nếu muốn bỏ qua 1 đoạn lệnh nào đó thì đưa dấu nháy đến dòng kế
tiếp đoạn lệnh đó rồi nhấn phím F4 để chương trình thực thi đến
dòng có dấu nháy và dừng lại ở đó
- Cửa sổ theo dõi giá trị các biến (cửa sổ watch):
Nếu cửa sổ watch chưa xuất hiện: nhấn tổ hợp phím Alt + W
sau đó nhấn tiếp phím W hoặc vào menu Windows
Watch
Bấm tổ hợp phím Ctrl + F7 hoặc phím INSERT (nếu cửa sổ
watch đã được mở), nhập vào các biến cần theo dõi giá trị khi
Trang 10thực hiện xong 1 câu lệnh hoặc hàm vào ô Watch
Expression sau đó bấm phím ENTER hoặc bấm nút OK
Xóa biến trên cửa sổ watch bằng cách chọn vào biến đó trên
cửa sổ watch, bấm phím DELETE
- Muốn thay đổi giá trị của biến ta bấm tổ hợp phím Ctrl+F4 hoặc vào menu Windows Evaluate/modify… để hiển thị cửa sổ
Evaluate and Modify
Nhập tên biến vào ô Expression sau đó bấm phím ENTER
hoặc bấm nút Evaluate, ô Result sẽ hiển thị kết quả hiện tại
của biến vừa nhập
Nhập giá trị mới cho biến vừa nhập vào ô New Value, sau đó
bấm phím ENTER hoặc bấm nút Modify để thay đổi giá trị
của biến
Trang 11
- Đánh dấu để chương trình thực thi đến vị trí đánh dấu (khi chưa debug) bằng cách đưa dấu nháy đến dòng cần đánh dấu, bấm tổ hợp
phím Ctrl + F8 Vị trí đánh dấu sẽ có vệt sáng màu đỏ Có thể đánh
dấu nhiều vị trí khác nhau
Bấm tổ hợp phím Ctrl+F9 để chương trình thực thi đến vị trí đánh dấu theo thứ tự từ trên xuống Có thể dùng phím F7 hoặc F8 để chạy
từng bước giống như trên
Bỏ đánh dấu tại vị trí nào thì đưa dấu nháy đến vị trí đó rồi bấm tổ
hợp phím Ctrl + F8
- Bấm tổ hợp phím Atl + F5 để xem kết quả xuất trong quá trình
debug
Trang 12- Bấm tổ hợp phím Ctrl + F2 để dừng quá trình debug