16 — Hata Ayıklama
kabalang hata-ayikla· KabaLang seviyesinde durma, bakma, ilerleme.
kabalang hata-ayikla programınızı hata ayıklama bilgisiyle derler ve
KabaLang hata ayıklayıcısını başlatır: değerler KabaLang gösterimiyle,
yığın izi KabaLang fonksiyon adlarıyla, duraklar .kbl satır numaralarıyla
görünür.
⚠️ Hata ayıklayıcı isteğe bağlı bir bileşendir. Kurulu değilse komut neyin kurulması gerektiğini (
kaba kur …satırıyla) söyleyerek 3 koduyla çıkar; sessizce çalışıyormuş gibi yapmaz.
Hızlı başlangıç
# 12. satırda dur, değişkenlere bak
kabalang hata-ayikla ana.kbl -d 12
# hata ayıklayıcı istemi açılır; şunu yazın:
# run programı başlat
# kaba-degiskenler görünür KabaLang değişkenleri
# kaba-yigin KabaLang yığın izi
# continue devam et
# quit çıkAçılışta KabaLang hata ayıklama katmanı yüklendi satırı basılır. Bu satırı
görmüyorsanız değerler KabaLang gösterimiyle görünmez; kurulumunuzu
denetleyin.
Betikten / sınamadan kullanmak için (etkileşimsiz):
kabalang hata-ayikla ana.kbl --toplu -d 12 -k run -k kaba-degiskenler| Seçenek | Ne yapar |
|---|---|
-d, --durak SATIR |
KabaLang satırına durak noktası (birden çok kez) |
-k KOMUT |
Açılışta çalıştırılacak hata ayıklayıcı komutu (birden çok kez) |
--toplu |
Komutları çalıştırır ve çıkar (betik/CI) |
--sessiz |
Derleme ilerleme iletilerini gizler |
⚠️ Seçenekler kaynak adından önce yazılır. Kaynaktan sonra gelen her şey,
calistirda olduğu gibi, programa iletilen argüman sayılır. Yanlışlıkla dosyadan sonra yazılan seçenekler için komut uyarı verir.
KabaLang komutları
İstemde KabaLang'a özgü beş komut vardır:
| Komut | Ne yapar |
|---|---|
durak <satir> |
Geçerli .kbl dosyasında durak noktası — dosya adı yazmaya gerek yok |
kaba-degiskenler |
Görünür KabaLang değişkenleri, KabaLang gösterimiyle |
kaba-yigin |
KabaLang yığın izi (fonksiyon adları + argümanlar) |
kaba-yaz <ifade> |
Tek bir değeri KabaLang gösterimiyle yazar |
kaba-yardim |
Bu listeyi gösterir |
Programı yürütmek için genel komutlar da olduğu gibi çalışır:
| Komut | Ne yapar |
|---|---|
run |
programı başlatır |
continue |
bir sonraki durağa kadar devam eder |
next |
bir satır ilerler (fonksiyonun içine girmez) |
step |
bir satır ilerler (çağrılan fonksiyonun içine girer) |
finish |
içinde bulunulan fonksiyonun sonuna kadar koşar |
print <ad> |
bir değeri yazar |
list |
çevredeki kaynak satırlarını gösterir |
bt |
yığın izi |
frame <n> |
yığındaki n numaralı çerçeveye geçer |
quit |
çıkar |
Ne görüyorsunuz
Aşağıda her komutun altında hata ayıklayıcının verdiği karşılık var:
print ad
$1 = "Semih"
print sayilar
$2 = [3, 5, 7]
print esya
$3 = {ad = "Klavye", uzun_ad = "Kablosuz Mekanik Klavye", fiyat = 750}
kaba-yigin
#0 topla(liste) → ornek.kbl:10 [liste=[3, 5, 7]]
#1 <ana program> → ornek.kbl:31
kaba-degiskenler
— topla(liste) (ornek.kbl:10)
n = 3
toplam = 0
liste = [3, 5, 7]Gösterim kuralları
Yazıcılar kaynak sözdizimini gösterir, yazdir çıktısını değil:
| Tür | Hata ayıklayıcıda | yazdir ile |
|---|---|---|
| metin | "Semih" |
Semih |
| liste | [3, 5, 7] |
[3, 5, 7] |
| metin listesi | ["bir", "iki"] |
[bir, iki] |
| sözlük | {"bir": 1, "iki": "iki"} |
{"bir":1,"iki":"iki"} |
| mantık | doğru / yanlış |
aynı |
| boş | bos |
aynı |
| yapı | Urun(ad: "Klavye", fiyat: 750) |
aynı |
⚠️ Tırnak farkı bilinçlidir. Hata ayıklarken
"5"ile5arasındaki fark çoğu zaman kusurun ta kendisidir;yazdirbunları aynı gösterir, hata ayıklayıcı göstermemeli.
Yalnız sizin yazdığınız değişkenler
kaba-degiskenler yalnız sizin yazdığınız değişkenleri listeler.
Derleyici, döngüler gibi yapılar için kendi yardımcı değişkenlerini de
oluşturur (adları __for_range, __closure, _<ad>_ic gibidir);
bunlar gizlenir.
⚠️ Genel
info localskomutu bu yardımcı değişkenleri göstermeye devam eder. İkisi de elinizin altındadır: temiz görünüm içinkaba-degiskenler, ham görünüm içininfo locals.
Yığın izi hakkında iki not
Kaynağı derledikten sonra düzenlediyseniz yeniden derleyin. Fonksiyon adları yığın izine kaynak dosyadan okunur; derlemeden sonra düzenlenen bir dosyada yığın izi yanlış ad gösterebilir.
Çerçeve numaraları atlayabilir. bt çıktısında numaralar ardışık
olmayabilir:
bt
#0 topla(liste) (liste=[3, 5, 7]) at gosteri.kbl:6
#2 0x0000555555557954 in <ana program> () at gosteri.kbl:20⚠️
#1in eksik olması hata değildir: gizlenen bir yardımcı çerçevedir. Numaralar yine de geçerlidir —frame 2doğru çerçeveye gider.kaba-yiginise kendi listesini#0dan başlayarak ardışık numaralar.
Derleyici tanıları ve yakalanmayan hatalar
Hata ayıklayıcı açmadan önce derleyicinin kendi söyledikleri çoğu zaman yeter. Her tanı bir kod taşır, kaynağı satır ve sütunuyla gösterir, ilgili yerleri (ör. fonksiyonun tanımı) ikincil etiketle işaretler ve çoğunlukla düzeltilmiş satırı önerir:
✗ hata[TIP_UYUSMAZLIGI]: 'metin' ile 'sayi' toplanamaz
┌─ ana.kbl:2:11
│
2│ yazdir(ad + 5)
│ ── ─ ─ bu bir sayi
│ │
│ bu bir metin
│
= öneri: metin ile sayıyı birleştirmek için sayıyı metne çevirin: metin(...)
= düzeltilmiş: yazdir(ad + metin(5))
= yardım: kabalang acikla TIP_UYUSMAZLIGI- Ayrıştırıcı ilk hatada durmaz: bir derlemede birbirinden bağımsız bütün sözdizimi hataları listelenir (aynı satırdaki ya da kapanmamış bir parantezin ardından gelen sahte hatalar bastırılır).
kabalang acikla <KOD>kodun ne demek olduğunu yanlış/doğru örnekle anlatır (bütün kodlar:kabalang acikla; kaynakbelgeler/TANI-KODLARI.md).- Bilinmeyen ad, metot ve modülde en yakın ad önerilir (Türkçe klavye
hataları —
yazdır,doğru— dâhil); Python/JS alışkanlıkları (def,print,for x in,else if,x++,&&,true) KabaLang karşılığıyla söylenir. kabalang kontrol --jsontanıları makinece okunur biçimde verir (IDE ve araçlar için: aralık, ikincil etiketler, öneriler, uygulanabilir düzeltmeler).- Renk terminalde açık, boruda kapalıdır;
NO_COLOR=1ya daKABALANG_RENK=0/1ile zorlanır.
Yakalanmayan çalışma anı hatası (sınır dışı, taşma, sıfıra bölme, yakalanmayan
firlat) iletiden sonra hatalı satırı ve .kbl satırlı yığın izini
basar:
✗ Çalışma zamanı hatası: …/yigin.kbl:3: liste sınır dışı: indeks 3, geçerli aralık -3..2 (negatif indeks sondan sayar)
yigin.kbl:3 │ don l[a] // b
yığın izi (en son çağrı en üstte):
bol yigin.kbl:3
hesapla yigin.kbl:8
ana program yigin.kbl:11
= yardım: kabalang acikla SINIR_DISIDerleyici bunun için ikiliye yalnız satır tablosu yazar (üretilen makine kodu
aynıdır, hız bedeli yok); iz, hata anında addr2line/llvm-symbolizer ile
çözülür. KABALANG_YIGIN=0 (derlerken ya da çalıştırırken) izi kapatır.
Ayrıca
kabalang sinav --kapsam— kapsam ölçümü de.kblsatırlarına eşlenir (13. Proje ve şablonlar).- 15. Tuzaklar — dilin bilinen tuzakları.