Chào mừng quý vị đến với
Quý vị chưa đăng nhập hoặc chưa đăng ký làm thành
viên, vì vậy chưa thể tải được các tài liệu của
Thư viện về máy tính của mình.
Nếu chưa đăng ký, hãy nhấn vào chữ Mở trang đăng nhập, hoặc xem phim hướng dẫn tại đây
Nếu đã đăng ký rồi, quý vị có thể đăng nhập ở ngay phía bên trái.
Nếu chưa đăng ký, hãy nhấn vào chữ Mở trang đăng nhập, hoặc xem phim hướng dẫn tại đây
Nếu đã đăng ký rồi, quý vị có thể đăng nhập ở ngay phía bên trái.
Test đưa bài

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Đinh Hải Minh (trang riêng)
Ngày gửi: 16h:32' 06-07-2016
Dung lượng: 83.0 KB
Số lượt tải: 3
Nguồn:
Người gửi: Đinh Hải Minh (trang riêng)
Ngày gửi: 16h:32' 06-07-2016
Dung lượng: 83.0 KB
Số lượt tải: 3
Số lượt thích:
0 người
Kỹ thuật Debug trong C
Đối với lập trình viên, việc đề ra ý tưởng để giải quyết vấn đề đã là khó khăn, nhưng việc cài đặt được ý tưởng đó cũng không đơn giản. Đôi khi chỉ vì một dấu “;” hay sai kiểu dữ liệu cũng có thể biến bản cài đặt trở nên vô nghĩa vì không thể hiện đúng ý tưởng đề ra. Nhưng làm sao để phát hiện ra một con sâu (lỗi-bug) trong một “rừng lệnh”? Câu trả lời rất đơn giản nhưng khó thực hiện : chúng ta phải kiên nhẫn “vạch lá tìm sâu” ! Đó là lý do tại sao chúng ta phải nắm kỹ thuật debug.
Bài viết này nhằm hướng dẫn các bạn sử dụng kỹ thuật debug để tìm lỗi thông qua việc phân tích các ví dụ, đồng thời cũng đưa ra một số bài tập từ dễ đến khó để các bạn có thể từng bước nắm vững kỹ thuật debug.
Hi vọng bài viết này sẽ giúp ích được cho các bạn. Mọi thắc mắc hoặc ý kiến đóng góp xin gửi về địa chỉ mail : nvhoang@fit.hcmuns.edu.vn.
Các loại lỗi trong chương trình:
Lỗi sai cú pháp:
Đây là những lỗi sai xảy ra khi biên dịch chương trình (sau khi nhấn F9). Khi gặp lỗi này, chúng ta nên nhấn Ctrl-F1 để gọi giúp đỡ hoặc xem lại tài liệu tham khảo. Ở đây không để cập chi tiết đến vấn đề này.
Lỗi sai logic:
Khái niệm :
Các lỗi sai logic là những lỗi khi biên dịch, trình biên dịch không báo lỗi. Những lỗi này nằm tiềm ẩn trong chương trình và làm cho chương trình của chúng ta đưa ra những kết quả không như mong muốn.
Các lỗi sai logic thường xuất phát từ 2 nguyên nhân :
Do “nhầm” (nhầm chứ không sai) cú pháp dẫn đến sai logic.
Do ý tưởng để giải quyết bài toán đã sai ngay từ đầu.
Loại lỗi này bình thường rất khó nhận ra. Dĩ nhiên, nếu tinh ý đôi khi chúng ta vẫn có thể phát hiện ra những lỗi này, nhưng việc phát hiện này đòi hỏi chúng ta phải nắm rất vững cú pháp C, cũng như logic của chương trình cộng thêm một chút kinh nghiệm. Tuy nhiên, trong đa số các trường hợp chúng ta phải thực hiện công đoạn debug để tìm ra các lỗi sai logic này.
Một số ví dụ về lỗi sai logic :
Sau đây là một số ví dụ về lỗi sai logic:
VD1 : Xét hàm hoán vị 2 số nguyên
void HoanVi(int a, int b) {
int c = a;
a = b;
b = c; }
Thoạt nhìn, chúng ta hàm này không có vấn đề gì cả ! Nhưng nếu tinh ý một chút chúng ta sẽ thấy cách truyền tham số của hàm là sai, đây là cách truyền tham trị chứ không phải truyền tham biến, do đó giá trị của a, b sẽ không thay đổi sau khi hàm thực hiện xong. Chúng ta phải sửa lại như sau :
void HoanVi(int &a, int &b) {
int c = a;
a = b;
b = c; }
VD2 : Xét hàm sắp xếp mảng một chiều các số nguyên theo thứ tự tăng dần
/*
Hàm sắp xếp mảng
Tham số vào :
n – số lượng số nguyên
a - mảng một chiều các số nguyên, từ a[0]...a[n-1]
*/
void SapXepMangTangDan(int n, int a[])
{
int i, j;
for (int i = 0; i < n; i++);
for (int j = 0; j < n; j++)
if (a[i] > a[j])
HoanVi(a[i], a[j]);
}
Nếu như chúng ta chưa từng gõ đoạn mã hàm sắp xếp thì có lẽ chúng ta khó phát hiện ra chỗ sai. Nhưng cho dù như vậy chúng ta vẫn có thể phát hiện ra dòng lệnh “for (int i = 0; i < n; ilà có vấn đề, tại sao lại có dấu “;” ở cuối dòng lặp “for” ?
Nhưng cho dù bạn có bỏ dấu “;” đi thì hàm này vẫn sai. Trong trường hợp này chúng ta bắt buộc phải debug để loại đi những lỗi logic.
Các bạn có thể tham khảo phục lục để xem một số lỗi sai logic thường gặp.
Cơ chế thực thi chương trình :
Để có thể thực hiện công việc debug, trước hết chúng ta sẽ tìm hiểu cơ chế thực thi của một chương trình C.
(Để cho đơn giản, tôi xin phép chỉ trình bày việc thực thi mức ngôn ngữ C, chứ không trình bày ở mức ngôn ngữ assembly).
Cơ chế chính thực thi trong chương trình C là
Đối với lập trình viên, việc đề ra ý tưởng để giải quyết vấn đề đã là khó khăn, nhưng việc cài đặt được ý tưởng đó cũng không đơn giản. Đôi khi chỉ vì một dấu “;” hay sai kiểu dữ liệu cũng có thể biến bản cài đặt trở nên vô nghĩa vì không thể hiện đúng ý tưởng đề ra. Nhưng làm sao để phát hiện ra một con sâu (lỗi-bug) trong một “rừng lệnh”? Câu trả lời rất đơn giản nhưng khó thực hiện : chúng ta phải kiên nhẫn “vạch lá tìm sâu” ! Đó là lý do tại sao chúng ta phải nắm kỹ thuật debug.
Bài viết này nhằm hướng dẫn các bạn sử dụng kỹ thuật debug để tìm lỗi thông qua việc phân tích các ví dụ, đồng thời cũng đưa ra một số bài tập từ dễ đến khó để các bạn có thể từng bước nắm vững kỹ thuật debug.
Hi vọng bài viết này sẽ giúp ích được cho các bạn. Mọi thắc mắc hoặc ý kiến đóng góp xin gửi về địa chỉ mail : nvhoang@fit.hcmuns.edu.vn.
Các loại lỗi trong chương trình:
Lỗi sai cú pháp:
Đây là những lỗi sai xảy ra khi biên dịch chương trình (sau khi nhấn F9). Khi gặp lỗi này, chúng ta nên nhấn Ctrl-F1 để gọi giúp đỡ hoặc xem lại tài liệu tham khảo. Ở đây không để cập chi tiết đến vấn đề này.
Lỗi sai logic:
Khái niệm :
Các lỗi sai logic là những lỗi khi biên dịch, trình biên dịch không báo lỗi. Những lỗi này nằm tiềm ẩn trong chương trình và làm cho chương trình của chúng ta đưa ra những kết quả không như mong muốn.
Các lỗi sai logic thường xuất phát từ 2 nguyên nhân :
Do “nhầm” (nhầm chứ không sai) cú pháp dẫn đến sai logic.
Do ý tưởng để giải quyết bài toán đã sai ngay từ đầu.
Loại lỗi này bình thường rất khó nhận ra. Dĩ nhiên, nếu tinh ý đôi khi chúng ta vẫn có thể phát hiện ra những lỗi này, nhưng việc phát hiện này đòi hỏi chúng ta phải nắm rất vững cú pháp C, cũng như logic của chương trình cộng thêm một chút kinh nghiệm. Tuy nhiên, trong đa số các trường hợp chúng ta phải thực hiện công đoạn debug để tìm ra các lỗi sai logic này.
Một số ví dụ về lỗi sai logic :
Sau đây là một số ví dụ về lỗi sai logic:
VD1 : Xét hàm hoán vị 2 số nguyên
void HoanVi(int a, int b) {
int c = a;
a = b;
b = c; }
Thoạt nhìn, chúng ta hàm này không có vấn đề gì cả ! Nhưng nếu tinh ý một chút chúng ta sẽ thấy cách truyền tham số của hàm là sai, đây là cách truyền tham trị chứ không phải truyền tham biến, do đó giá trị của a, b sẽ không thay đổi sau khi hàm thực hiện xong. Chúng ta phải sửa lại như sau :
void HoanVi(int &a, int &b) {
int c = a;
a = b;
b = c; }
VD2 : Xét hàm sắp xếp mảng một chiều các số nguyên theo thứ tự tăng dần
/*
Hàm sắp xếp mảng
Tham số vào :
n – số lượng số nguyên
a - mảng một chiều các số nguyên, từ a[0]...a[n-1]
*/
void SapXepMangTangDan(int n, int a[])
{
int i, j;
for (int i = 0; i < n; i++);
for (int j = 0; j < n; j++)
if (a[i] > a[j])
HoanVi(a[i], a[j]);
}
Nếu như chúng ta chưa từng gõ đoạn mã hàm sắp xếp thì có lẽ chúng ta khó phát hiện ra chỗ sai. Nhưng cho dù như vậy chúng ta vẫn có thể phát hiện ra dòng lệnh “for (int i = 0; i < n; ilà có vấn đề, tại sao lại có dấu “;” ở cuối dòng lặp “for” ?
Nhưng cho dù bạn có bỏ dấu “;” đi thì hàm này vẫn sai. Trong trường hợp này chúng ta bắt buộc phải debug để loại đi những lỗi logic.
Các bạn có thể tham khảo phục lục để xem một số lỗi sai logic thường gặp.
Cơ chế thực thi chương trình :
Để có thể thực hiện công việc debug, trước hết chúng ta sẽ tìm hiểu cơ chế thực thi của một chương trình C.
(Để cho đơn giản, tôi xin phép chỉ trình bày việc thực thi mức ngôn ngữ C, chứ không trình bày ở mức ngôn ngữ assembly).
Cơ chế chính thực thi trong chương trình C là
 
Xin chào
dpaojd;oqwlke;qweqwe qwelqwiheqlw;jeqwe qwe;qwoje;qlwkeqlwe









Các ý kiến mới nhất 1