Lua Academy · Ders

Durum ve Hata İşleme

Korumalı çağrılar için lua_pcall kullanın ve C katmanındaki hataları yönetin.

4. ders / 413 adım

Durum ve Hata İşleme, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Birden Çok Lua Durumu

Aynı işlem içinde birden çok lua_State örneği çalıştırabilirsiniz. Her biri tamamen bağımsızdır: ayrı genelleri ve ayrı yığınları vardır; varsayılan olarak paylaşılan bellek yoktur.

İş Parçacığı Durumları

lua_newthread(L), aynı genel ortamı paylaşan ancak kendi yığınına sahip bir alt iş parçacığı (eş yordam) oluşturur. Lua eş yordamları C içinde bu şekilde uygulanır.

Durumlar Arasında Veri Paylaşma

Bağımsız Lua durumları arasında veriler doğrudan aktarılamaz. Verileri dizelere dönüştürün veya kullanıcı verileri aracılığıyla erişilebilen, C tarafında paylaşılan bellek yapılarını kullanın.

Korumalı Çağrılar ve Ham Çağrılar

lua_pcall hataları yakalar (arka planda setjmp/longjmp kullanır). lua_call hataları yayar ve programı sonlandırır. Üretim ortamında her zaman lua_pcall kullanın.

// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
  const char *err = lua_tostring(L, -1);
  lua_pop(L, 1);
  // handle error
}

Hata Nesneleri

Lua'daki hatalar yalnızca dizelerden değil, herhangi bir değerden oluşabilir. error({code=404, msg="not found"}) tabloyu hata olarak yığına iter. C kodu, pcall başarısız olduğunda bu tabloyu yığından okur.

Panik İşleyicisi

Bir hata pcall'dan kaçarsa (örneğin koruma olmadan çağrılan bir C işlevinden), Lua sonlandırmadan önce lua_atpanic(L, fn) ile ayarlanan panik işleyicisini çağırır.

// C code
lua_atpanic(L, function(lua_State *L) {
  fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
  exit(1);
  return 0;
});

Hata Durumunda Yığını Geri Yükleme

Bir lua_pcall hatasından sonra yığın, çağrıdan önceki duruma geri yüklenir (işlev ve bağımsız değişkenler çıkarılır, üstte hata nesnesi bulunur).

Durum Temizleme

İşiniz bittiğinde durumu her zaman lua_close(L) ile kapatın. Bu işlem tüm __gc sonlandırıcılarını tetikler ve ayrılmış belleğin tamamını serbest bırakır.

İş Parçacığı Güvenliği

Lua durumu iş parçacığı açısından güvenli değildir. Aynı durum üzerinde iki C API işlevini eşzamanlı olarak asla çağırmayın. İşletim sistemi iş parçacığı başına bir durum kullanın veya erişimi sıraya koymak için bir karşılıklı dışlama kilidi kullanın.

Bellek Ayırıcı

Lua varsayılan olarak realloc kullanır. Bellek takibi, sınırlar veya özel havuzlar için lua_newstate(allocFn, ud) ile özel bir ayırıcı sağlayın.

Birden Çok Durumla Korumalı Çalıştırma

Güvenilmeyen kodu, standart kitaplıkları açılmamış yeni ve yalıtılmış bir Lua durumunda çalıştırın. Herhangi bir çökme veya kaynak tükenmesi o durumla sınırlı kalır.

Hata İşleme Sorusu

lua_call ile lua_pcall arasındaki fark nedir?

Özet: Durumları ve Hataları Yönetme

Üretim ortamında lua_pcall (asla lua_call değil) kullanın. Son çare kurtarma için bir panik işleyicisi ayarlayın. İş parçacığı başına bir durum tutun. Korumalı çalıştırma için birden çok yalıtılmış durum kullanın. Temizlemek için her zaman lua_close çağrısını yapın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Lua öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
40
Dersler
159

Sıkça Sorulan Sorular

“Durum ve Hata İşleme” dersi ücretsiz mi?

Evet — “Durum ve Hata İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Durum ve Hata İşleme” dersinde ne öğreneceğim?

Korumalı çağrılar için lua_pcall kullanın ve C katmanındaki hataları yönetin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Durum ve Hata İşleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Lua C API Yığın Modeli
  2. C'den Lua İşlevlerini Çağırma
  3. C İşlevlerini Lua'ya Kaydetme
  4. Durum ve Hata İşleme
← Lua Academy Sayfasına Dön