19. Xatolarni aniqlash va Debug qilish¶
Dastur yozayotganda xatolar qilish odatiy hol.
Hatto tajribali dasturchilar ham xato qiladi.
Muhimi — xatoni topish va tuzatishni bilish.
Bu jarayon debugging deb ataladi.
Xato nima?¶
Masalan, quyidagi kodda xato bor:
int son = 10
Bu yerda ; belgisi yozilmagan.
To‘g‘ri ko‘rinishi:
int son = 10;
C++ kompilyator xato haqida xabar beradi.
Xatolarning asosiy turlari¶
C++ dasturlarida uchraydigan xatolarni uchta asosiy guruhga bo‘lish mumkin:
- Syntax error
- Runtime error
- Logic error
Syntax error¶
Syntax error — kodni yozish qoidalarining buzilishi.
Masalan:
cout << "Salom"
Bu yerda ; yo‘q.
To‘g‘ri:
cout << "Salom";
Yana bir misol:
if (son > 10 {
cout << son;
}
Bu yerda ) belgisi yetishmayapti.
To‘g‘ri:
if (son > 10) {
cout << son;
}
Bunday xatolarni odatda kompilyator ko‘rsatib beradi.
Runtime error¶
Runtime error dastur ishlayotgan vaqtda yuz beradi.
Masalan, mavjud bo‘lmagan massiv elementiga murojaat qilish xavfli:
int sonlar[3] = {10, 20, 30};
cout << sonlar[10];
Massivda faqat:
0
1
2
indekslar mavjud.
10 indeks mavjud emas.
Bunday xatolar dastur noto‘g‘ri ishlashiga yoki to‘xtab qolishiga olib kelishi mumkin.
Logic error¶
Logic error eng qiyin xatolardan biri.
Dastur ishlaydi, lekin natija noto‘g‘ri bo‘ladi.
Masalan:
int a = 10;
int b = 5;
int natija = a - b;
Agar biz qo‘shishni xohlagan bo‘lsak, kod ishlaydi, lekin natija noto‘g‘ri.
To‘g‘ri:
int natija = a + b;
Bu — logic error.
cout yordamida xatoni topish¶
Xatoni topishning eng oddiy usullaridan biri — qiymatlarni ekranga chiqarish.
Masalan:
int a = 10;
int b = 5;
int natija = a * b;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "natija = " << natija << endl;
Natijalarni ko‘rib, dastur qanday ishlayotganini tekshirishimiz mumkin.
if bilan tekshirish¶
Dasturda ma'lumotni tekshirish ham foydali.
Masalan:
int yosh;
cin >> yosh;
if (yosh < 0) {
cout << "Yosh noto‘g‘ri!";
}
Bu foydalanuvchi noto‘g‘ri qiymat kiritganini aniqlashga yordam beradi.
Compiler xabarlarini o‘qish¶
C++ da xato bo‘lsa, kompilyator odatda xato haqida ma'lumot beradi.
Masalan:
error: expected ';' before ...
Bu xabar ko‘pincha ; yetishmayotganini bildiradi.
Xato xabarini o‘qishni o‘rganish dasturchi uchun juda muhim.
Debugging nima?¶
Debugging — dasturdagi xatolarni topish va tuzatish jarayoni.
Oddiy jarayon:
Kod yozish
↓
Dasturni ishga tushirish
↓
Xato topish
↓
Sababini aniqlash
↓
Xatoni tuzatish
↓
Qayta tekshirish
Debugger¶
Ko‘plab dasturlash muhitlarida debugger mavjud.
Debugger yordamida dastur qadam-baqadam bajarilishini kuzatish mumkin.
Masalan:
int a = 10;
int b = 20;
int c = a + b;
Debugger yordamida dastur qaysi qatorda turganini va o‘zgaruvchilarning qiymatlarini ko‘rish mumkin.
Breakpoint¶
Debuggerdagi eng foydali vositalardan biri — breakpoint.
Breakpoint dasturga:
"Shu qatorga kelganda vaqtincha to‘xta."
degan buyruq beradi.
Masalan:
int a = 10;
int b = 20;
int c = a + b;
Agar int c = a + b; qatoriga breakpoint qo‘ysak, dastur shu qatorga kelganda to‘xtaydi.
Shunda a va b qiymatlarini tekshirishimiz mumkin.
Debug qilishning oddiy usuli¶
Xato topilganda darhol kodni tasodifiy o‘zgartirmang.
Avval quyidagilarni tekshiring:
- Xato qayerda yuz berdi?
- Qaysi qiymat noto‘g‘ri?
- Bu qiymat qayerda o‘zgardi?
- Dastur qanday natija berishi kerak edi?
- Haqiqiy natija qanday bo‘ldi?
Shundan keyin xatoni tuzatish osonroq bo‘ladi.
Oddiy misol¶
Quyidagi kodni ko‘ramiz:
int a = 10;
int b = 20;
int natija = a - b;
cout << natija;
Natija:
-10
Agar biz 30 kutgan bo‘lsak, muammo bor.
Kodda:
a - b
ishlatilgan.
Bizga esa:
a + b
kerak.
To‘g‘rilangan kod:
int natija = a + b;
Natija:
30
Bu logic error edi.
Xatodan qo‘rqmang¶
Dasturlashni o‘rganayotgan paytda xato qilish tabiiy.
Xato chiqishi — siz yomon dasturchi ekanligingizni bildirmaydi.
Aksincha, xatoni topib, sababini tushunish dasturlashni o‘rganishning muhim qismidir.
Amaliy mashqlar¶
1-mashq¶
Quyidagi koddagi xatoni toping:
int son = 10
cout << son;
2-mashq¶
Quyidagi kod nima uchun noto‘g‘ri natija beradi?
int a = 20;
int b = 10;
cout << a - b;
Agar natija 30 bo‘lishi kerak bo‘lsa, kodni tuzating.
3-mashq¶
Foydalanuvchidan yoshini oling.
Agar yosh manfiy bo‘lsa:
Noto‘g‘ri yosh!
degan xabar chiqaring.
4-mashq¶
Quyidagi massivda qanday muammo borligini aniqlang:
int sonlar[3] = {10, 20, 30};
cout << sonlar[5];
Muhim narsalarni eslab qoling¶
Syntax error — kod yozish qoidalaridagi xato.
Runtime error — dastur ishlayotgan vaqtdagi xato.
Logic error — dastur ishlaydi, lekin natija noto‘g‘ri.
Debugging — xatolarni topish va tuzatish jarayoni.
cout yordamida o‘zgaruvchilar qiymatini tekshirish mumkin.
Debugger va breakpoint katta dasturlardagi xatolarni topishda juda foydali.
Eng muhimi: xato chiqsa, uning sababini tushunishga harakat qiling.