Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.07 MB, 20 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Debugging Heuristic Áp dụng khi nào
(1) Hiểu các thông báo lỗi (error messages) Build-time (dịch)
(2) Nghĩ trước khi viết lại chương trình
Run-time (chạy)
(3) Tìm kiếm các lỗi (bug) hay xảy ra
(4) Divide and conquer
(5) Viết thêm các đoạn mã kiểm tra để
chương trình tự kiểm tra nó
(6) Hiện thị kết quả
(7) Sử dụng debugger
(8) Tập trung vào các lệnh mới viết / mới viết
<b>#include <stdioo.h> </b>
<b>int main(void) </b>
<b>/* Print "hello, world" to stdout and </b>
<b> return 0. </b>
<b>{ </b>
<b> printf("hello, world\n"); </b>
<b> return 0; </b>
<b>} </b>
<b>$ gcc217 hello.c -o hello </b>
<b>hello.c:1:20: stdioo.h: No such file or directory </b>
<b>hello.c:3:1: unterminated comment </b>
<b>hello.c:2: error: syntax error at end of input </b>
<b>#include <stdio.h> </b>
<b>int main(void) </b>
<b>/* Print "hello, world" to stdout and </b>
<b>{ </b>
<b> printf("hello, world\n") </b>
<b> retun 0; </b>
<b>} </b>
<b>$ gcc217 hello.c -o hello </b>
<b>hello.c: In function `main': </b>
<b>hello.c:7: error: `retun' undeclared (first use in this function) </b>
<b>hello.c:7: error: (Each undeclared identifier is reported only once </b>
<b>hello.c:7: error: for each function it appears in.) </b>
<b>hello.c:7: error: syntax error before numeric constant </b>
<b>#include <stdio.h> </b>
<b>int main(void) </b>
<b>/* Print "hello, world" to stdout and </b>
<b>{ </b>
<b> prinf("hello, world\n") </b>
<b> return 0; </b>
<b>} </b>
<b>$ gcc217 hello.c -o hello </b>
<b>hello.c: In function `main': </b>
<b>hello.c:6: warning: implicit declaration of function `prinf' </b>
<b>/tmp/cc43ebjk.o(.text+0x25): In function `main': </b>
<b>: undefined reference to `prinf' </b>
<b>collect2: ld returned 1 exit status </b>
Sai tên hàm
được gọi
Compiler <b>warning</b> (not <b>error</b>): prinf()
được gọi trước khi khai báo
▸ Đừng chép hết cả đoạn khơng có nguy cơ gây lỗi, hoặc in toàn bộ
code ra giấy in => phá vỡ cây cấu trúc
▸ Nếu mà giải thuật làm thay đổi CTDL, vẽ lại hình trước khi viết lại
giải thuật
▸ Đừng vội vàng, khi khơng rõ điều gì thực sự gây ra lỗi và sửa
▸ Tạo điều kiện để suy nghĩ lại
▸ <sub>Extrem programming : làm việc theo cặp, pair programming, </sub>
người này LT, người kia kiểm tra, và ngược lại
<b>int i; </b>
<b>… </b>
<b>scanf("%d", i); </b>
<b>char c; </b>
<b>… </b>
<b>c = getchar(); </b>
<b>switch (i) { </b>
<b> case 0: </b>
<b> … </b>
<b> /* missing break */ </b>
<b> case 1: </b>
<b> … </b>
<b> break; </b>
<b> … </b>
<b>} </b>
<b>if (i = 5) </b>
<b> … </b>
<b>if (5 < i < 10) </b>
<b> … </b>
<b>if (i & j) </b>
<b> … </b>
<b>while (c = getchar() != EOF) </b>
<b> … </b>
Tips: nếu đặt chế độ cảnh báo
(warnings) khi dịch thì hầu hết
các lỗi kiểu này sẽ được phát
<b>int n; scanf(“%d”,n); ? </b>
<b>int n=1; double d=PI; </b>
<b>printf(“%d %f \n”,d,n); ?? </b>
2. Array index out of bounds – Vượt ra ngoài
phạm vi chỉ số mảng
3. Call-by-value used instead of call-by
reference for function parameters to be
modified – Gọi theo giá trị, thay vì gọi theo
tham chiếu cho hàm để sửa
4. Comparison operators misused – Các toán tử
so sánh bị dùng sai
5. Compound statement not used - Lệnh phức hợp
không được dùng
6. Dangling else - nhánh else khong hợp lệ
7. Division by zero attempted - Chia cho 0
8. Division using integers so quotient gets
truncated – Dùng phép chia số nguyên nên phần
thập phân bị cắt
9. Files not closed properly (buffer not
flushed) - File khơng được đóng phù hợp (
buffer khơng bị dẹp)
10. Infinite loop - lặp vô hạn
11. Global variables used – dùng biến tổng thể
13. Left side of assignment not an L-value -
phía trái phép gán khơng phải biến
14. Loop has no body – vịng lặp khơng có thân
15. Missing "&" or missing "const" with a
call-by-reference
function parameter – thiếu dấu & hay từ khóa
const với lời gọi tham số hàm theo tham chiếu
16. Missing bracket for body of function or
compound statement – Thiếu cặp {} cho thân của
hàm hay nhóm lệnh
17. Mission reference to namespace - Thiếu
tham chiếu tới tên miền
18. Missing return statement in a
value-returning function – Thiếu return
19. Missing semi-colon in simple statement,
function prototypes, struct definitions or
class definitions – thiếu dấu ; trong lệnh
đơn …
20. Mismatched data types in expressions –
kiểu dữ liệu không hợp
21. Operator precedence misunderstood - Hiểu
sai thứ tự các phép toán
23. Overused (overloaded) local variable names
- Trùng tên biến cục bộ
24. Pointers not set properly or overwritten
in error – Con trỏ không được xác định đúng
hoặc trỏ vào 1 vị trí khơng có
25. Return with value attempted in void
function – trả về 1 giá trị trong 1 hàm void
26. Undeclared variable name – không khai báo
biến
27. Un-initialized variables – Không khởi tạo
giá trị
28. Unmatched parentheses – thiếu }
29. Un-terminated strings - xâu không kết
thúc, thiếu "
30. Using "=" when "= =" is intended or vice
versa
31. Using "&" when "&&" is intended or vice
versa
32. "while" used improperly instead of "if" –