9-hafta · Yakuniy

Debugging va yakuniy loyiha

Mana, oxirgi haftaga yetib keldingiz. Endi har bir dasturchining kundalik ishi, debugging, ya'ni xatolarni topish va tuzatishni o'rganamiz. So'ng o'rgangan hamma narsani birlashtirib, yakuniy loyiha qanday qurilishini ko'ramiz. Bu sayohatingizning yakuni va ayni paytda haqiqiy dasturchilik yo'lining boshlanishi.

Bu darsda nimani o'rganasiz

Xato (bug) nima va uch asosiy turini ajratasiz
Kompilyator xato xabarlarini o'qiysiz
printf va debugger bilan xato topasiz
Eng ko'p uchraydigan xatolarni tanib, tuzatasiz
Loyihani rejalashtirib, bosqichma-bosqich qurasiz
Butun kurs davomida o'rganganingizni bir joyga yig'asiz

9.1 Debugging nima?

Debugging (xatolarni tuzatish) deganda dasturdagi xatolarni (bug) topish va to'g'rilash jarayoni tushuniladi. Dunyodagi hech bir dasturchi xatosiz kod yozmaydi. Aslida, dasturchining ish vaqtining katta qismi yangi kod yozishga emas, mavjud kodni tuzatishga ketadi. Demak debugging qila olish, dasturchining eng muhim mahoratlaridan biri.

Yaxshi xabar shu: debugging o'rganiladigan ko'nikma. Tartibli yondashuv bilan har qanday xatoni topish mumkin. Bu haftada xato turlari, ularni topish usullari va eng ko'p uchraydigan xatolarni ko'rib chiqamiz.

"Bug" so'zining tarixi qiziq: 1947-yilda kompyuter ichiga kirib qolgan haqiqiy hasharot (kuya) nosozlikka sabab bo'lgan. O'shandan beri dasturdagi xatoni "bug", uni tuzatishni "debugging" deyishadi.

9.2 Xato turlari

Xatolar uch asosiy turga bo'linadi, va har birini boshqacha topamiz:

  • Sintaksis xatosi: til qoidasi buzilgan, masalan nuqta-vergul unutilgan. Kompilyator dasturni umuman yaratmaydi.
  • Ijro (runtime) xatosi: dastur ishlay boshlaydi, lekin ish vaqtida qulaydi, masalan massiv chegarasidan chiqish.
  • Mantiqiy xato: dastur ishlaydi va qulamaydi, lekin natija noto'g'ri. Bularni topish eng qiyin, chunki kompilyator yordam bermaydi.

Pastda har bir holatga to'g'ri turni tanlang:

Xatoni tasniflang turini tanlang
Har bir holat uchun to'g'ri xato turini bosing.

9.3 Xato xabarini o'qish

Sintaksis xatosida kompilyator sizga yordam beradi: xato qaysi qatorda va nima ekanini aytadi. Avvaliga bu xabarlar qo'rqinchli tuyuladi, lekin ularni o'qishni o'rgansangiz, debugging ancha osonlashadi. Quyidagi xabarda fayl nomi, qator raqami va xato izohi bor:

terminal
1salom.c:4:18: error: expected ';' before 'return'
2 return 0
3 ^

Buni qismlarga ajratamiz: salom.c bu fayl, 4 bu qator, 18 bu ustun, expected ';' esa "shu yerda nuqta-vergul kutilgan edi" degani. Demak 4-qatorda, return dan oldin ; qo'yishni unutibmiz.

Eng muhim maslahat: birinchi xatoni o'qing va tuzating, so'ng qayta kompilyatsiya qiling. Ko'pincha bitta xato keyingi ko'plab "xato"larga sabab bo'ladi, birinchisini tuzatsangiz qolganlari yo'qoladi.

9.4 printf bilan debug

Mantiqiy xatoda kompilyator jim turadi: dastur ishlaydi, lekin javob noto'g'ri. Eng oddiy va kuchli usul, printf bilan debugging: shubhali joylarga printf qo'yib, o'zgaruvchilar qiymatini ko'rasiz. Quyidagi dastur 1 dan 5 gacha qo'shishi kerak (javob 15), lekin u 10 chiqaryapti. Nega?

printf qo'sh tugmasini bosing, har qadamda sum qiymatini ko'ring:

printf bilan xato topish printf qo'sh
yigindi.c
1int sum = 0;
2for (int i = 1; i < 5; i++)
3 sum = sum + i;
terminal

9.5 Xatoni tuzating

Endi mashq vaqti. Quyida eng ko'p uchraydigan uchta xato. Har biri qizil bilan belgilangan. To'g'ri tuzatishni tanlang, kod yashilga aylanadi:

Xatoni tuzating to'g'ri tuzatishni tanlang
xato:
tekshir.c

9.6 Debugger

printf yaxshi, lekin maxsus vosita ham bor: debugger. U dasturni qator-qator qadamlab yurgizib, har qadamda barcha o'zgaruvchilar qiymatini ko'rsatadi. Aslida, bu butun kurs davomida ishlatgan jonli izlagichlarimizga juda o'xshaydi: 3-haftadagi sikl izlagichi, 8-haftadagi chaqiruv steki izlagichi, bularning hammasi debugger g'oyasi.

Debuggerda asosiy amallar:

  • Step (qadam): bitta qatorni bajarib, keyingisiga o'tish
  • Breakpoint (to'xtash nuqtasi): dasturni aniq bir qatorda to'xtatish
  • Watch (kuzatish): biror o'zgaruvchi qiymatini doimiy kuzatish
Eng kuchli, lekin eng oddiy usul ham bor: rezina o'rdakcha (rubber duck). Kodingizni qatorma-qator ovoz chiqarib, kimgadir (yoki o'rdakchaga) tushuntiring. Ko'pincha tushuntirish jarayonida xatoni o'zingiz topib qolasiz.

9.7 Yakuniy loyiha: rejalashtirish

Endi ikkinchi qism: katta loyiha qurish. Yangi boshlovchilar ko'pincha to'g'ridan-to'g'ri kod yozishga kirishadi va chalkashib ketadi. Tajribali dasturchi esa avval rejalashtiradi: katta masalani kichik, bajariladigan qadamlarga bo'ladi.

Masalan, oddiy "Vazifalar ro'yxati" (to-do) dasturi qilmoqchimiz. Uni shunday bo'lamiz:

  • Vazifalarni saqlash uchun ma'lumot tuzilmasini tanlash (massiv yoki ro'yxat)
  • Yangi vazifa qo'shish funksiyasi
  • Vazifalarni ekranga chiqarish funksiyasi
  • Vazifani bajarilgan deb belgilash
  • Hammasini faylga saqlash va keyin o'qish

Diqqat qiling: bu ro'yxatdagi har bir qadam, aynan shu kursda o'rgangan narsalaringiz. Massiv, funksiya, ma'lumot tuzilmasi, fayllar. Katta loyiha, shunchaki kichik, tanish qismlardan yig'iladi.

9.8 Bosqichma-bosqich qurish

Reja tayyor bo'lgach, hammasini birdan yozmaymiz. Bosqichma-bosqich quramiz: bitta kichik qismni yozamiz, uni sinab ko'ramiz, ishlasa keyingisiga o'tamiz. Bu eng muhim odat, chunki xato chiqsa, u faqat oxirgi yozgan kichik qismda bo'ladi, topish oson.

Amaliy qoidalar:

  • Avval eng sodda ishlaydigan versiyani qiling, keyin yaxshilang
  • Har bir yangi qismdan keyin dasturni ishga tushirib sinang
  • Bir vaqtda faqat bitta narsani o'zgartiring, shunda xato qayerdaligi aniq bo'ladi
  • Ishlaydigan versiyani saqlab boring (quyida git haqida)
Mukammal kodni birdan yozishga urinmang. Hatto tajribali dasturchilar ham avval ishlaydigan, sodda versiyani qilib, keyin uni asta-sekin yaxshilaydi. "Avval ishlasin, keyin chiroyli bo'lsin" degan qoida bor.

9.9 Sayohatni yakunlash

To'qqiz hafta oldin, ehtimol, dasturlash haqida hech narsa bilmasdingiz. Bugun esa kompyuter qanday ishlashidan tortib rekursiya va ma'lumotlar tuzilmalarigacha bilasiz. Quyida butun yo'lni ko'ring, har bir haftani bosib, nimani o'rganganingizni eslang:

Sizning sayohatingiz haftani bosing

Bu poydevor bilan endi ko'p yo'l ochiq: o'z loyihalaringizni qurish, yangi til (Python, JavaScript) o'rganish yoki shu bilimni chuqurlashtirish. Eng muhimi, dasturlashni o'rgandingiz, bu o'zini o'zi o'rgatishni o'rganish demakdir.

Bashorat qiling

Bu sikl terminalga necha marta yulduzcha chiqaradi?

main.c
1for (int i = 0; i <= 3; i++)
2 printf("*");
3 marta
4 marta
5 marta

9.10 Chuqurroq advanced

Yo'lda davom etish uchun yana ikkita foydali tushuncha.

Versiya nazorati (git)

Git sizning kodingiz tarixini saqlovchi vosita. Har bir ishlaydigan versiyani saqlab qo'yasiz, va agar yangi o'zgarish kodingizni buzib qo'ysa, oson holatga qaytasiz. Bundan tashqari, GitHub kabi xizmatlar orqali kod ustida boshqalar bilan birga ishlash mumkin. Har bir jiddiy dasturchi git ishlatadi.

Qayerga davom etish

C tilini bilganingiz uchun boshqa tillar endi sizga ancha oson. Python sodda va sun'iy intellekt uchun mashhur. JavaScript veb-saytlar uchun. Yoki shu yerda, C bilan o'yinlar va tizimlar yaratishni chuqurlashtirishingiz mumkin. Eng muhimi, doimiy amaliyot: kichik loyihalar qurish, har kuni biroz kod yozish.

Dasturlashda hech qachon "hammasini o'rganib bo'ldim" degan nuqta yo'q. Hatto 20 yillik tajribali dasturchilar ham har kuni yangi narsa o'rganadi. Bu doimiy o'rganish yo'li, va siz endi bu yo'lga chiqdingiz.

Atamalar lug'ati

bugdasturdagi xato.
debuggingxatolarni topish va tuzatish jarayoni.
sintaksis xatositil qoidasi buzilgan, kompilyator topadi.
mantiqiy xatodastur ishlaydi, lekin natija noto'g'ri.
breakpointdasturni aniq qatorda to'xtatuvchi nuqta.
gitkod tarixini saqlovchi versiya nazorati.

9.11 Yakuniy test

16 ta savol, butun kurs bo'yicha umumiy takror. Foundation'ni yakunlash uchun kamida 11 tasiga to'g'ri javob bering.

Tabriklaymiz! Foundation kursini tamomladingiz!

9 hafta davomida siz noldan boshlab, kompyuter qanday ishlashidan tortib algoritmlar, pointerlar, ma'lumotlar tuzilmalari va rekursiyagacha yo'lni bosib o'tdingiz. Bu jiddiy yutuq. Endi sizda haqiqiy dasturlash poydevori bor.

Bu oxir emas, balki boshlanish. Yo'lingiz ochiq bo'lsin!