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:

  1. Xato qayerda yuz berdi?
  2. Qaysi qiymat noto‘g‘ri?
  3. Bu qiymat qayerda o‘zgardi?
  4. Dastur qanday natija berishi kerak edi?
  5. 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.