KABAFORCEGeliştirici KabaOS'u edinin
Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.

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ıç

Uçbirim
# 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                çık

Açı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):

Uçbirim
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" ile 5 arasındaki fark çoğu zaman kusurun ta kendisidir; yazdir bunları 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 locals komutu bu yardımcı değişkenleri göstermeye devam eder. İkisi de elinizin altındadır: temiz görünüm için kaba-degiskenler, ham görünüm için info 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 2 doğru çerçeveye gider. kaba-yigin ise 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; kaynak belgeler/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 --json tanı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=1 ya da KABALANG_RENK=0/1 ile 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_DISI

Derleyici 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