This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold, inceleme olanağı sunan tümleşik bir Lua hata ayıklayıcısı (debugger) içerir. Yerleşik profil çıkarma (profiling) araçlarıyla birlikte, oyun mantığınızdaki hataların nedenini bulmanıza veya performans sorunlarını analiz etmenize yardımcı olabilecek güçlü bir araçtır.
Defold’da oyununuzda hata ayıklamanın en basit yolu, yazdırarak hata ayıklamayı kullanmaktır. Değişkenleri izlemek veya yürütme akışını göstermek için print() ya da pprint() ifadelerini kullanın. Betiği (script) olmayan bir oyun nesnesi (game object) tuhaf davranıyorsa ona yalnızca hata ayıklama amacı taşıyan bir betik ekleyebilirsiniz. Yazdırma işlevlerinden herhangi birini kullanmak, düzenleyicideki Console görünümüne ve oyun günlüğüne çıktı yazar.
Motor, yazdırmanın yanı sıra ekrana hata ayıklama metni ve düz çizgiler de çizebilir. Bunun için @render soketine (socket) iletiler (message) gönderilir:
-- Draw value of "my_val" with debug text on the screen
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Draw colored text on the screen
local color_green = vmath.vector4(0, 1, 0, 1)
msg.post("@render:", "draw_debug_text", { text = "Custom color", position = vmath.vector3(200, 180, 0), color = color_green })
-- Draw debug line between player and enemy on the screen
local start_p = go.get_position("player")
local end_p = go.get_position("enemy")
local color_red = vmath.vector4(1, 0, 0, 1)
msg.post("@render:", "draw_line", { start_point = start_p, end_point = end_p, color = color_red })
Görsel hata ayıklama iletileri, görüntü oluşturan işleme (rendering) hattına veri ekler ve bu veriler normal işleme hattının bir parçası olarak çizilir.
"draw_line", işleme betiğindeki render.draw_debug3d() işleviyle işlenen veriler ekler."draw_text", /builtins/fonts/debug/always_on_top_font.material materyalini kullanan /builtins/fonts/debug/always_on_top.font yazı tipiyle işlenir."draw_debug_text", "draw_text" ile aynıdır, ancak özel bir renkte işlenir.Bu verileri muhtemelen her karede güncellemek isteyeceğinizi unutmayın; bu nedenle iletileri update() işlevinde göndermek iyi bir fikirdir.
Hata ayıklayıcıyı çalıştırmak için Debug ▸ Start/Attach seçeneğini seçin. Bu seçenek, oyunu hata ayıklayıcı bağlı olarak başlatır veya hata ayıklayıcıyı zaten çalışan bir oyuna bağlar.

Hata ayıklayıcı bağlanır bağlanmaz konsoldaki hata ayıklayıcı kontrol düğmeleri veya Debug menüsü aracılığıyla oyunun yürütülmesini kontrol edebilirsiniz:


nextspawn() işlevinin çağrıldığı satırın altındaki end ifadesinde durur:

Bir Lua kodu satırı tek bir ifadeye karşılık gelmez. Hata ayıklayıcıda adımlama, her seferinde bir ifade ilerler; bu nedenle şu anda bir sonraki satıra geçmek için adım düğmesine birden fazla kez basmanız gerekebilir.
nextspawn() işlevinin içine ilerlemiştir:


Bir kesme noktası ayarlamak veya temizlemek için kod düzenleyicisinde satır numaralarının hemen sağındaki sütuna tıklayın. Menüden Edit ▸ Toggle Breakpoint seçeneğini de seçebilirsiniz.
Enabled onay kutusunun durumunu değiştirin. Devre dışı bırakılan kesme noktaları, etkin olmadıklarını göstermek için içleri boş olarak görünür.


Kesme noktası koşulunu düzenlemek için kod düzenleyicisinde satır numaralarının hemen sağındaki sütuna sağ tıklayın veya menüden Edit ▸ Edit Breakpoint seçeneğini seçin.

Şu anda değerlendirici aracılığıyla değişkenleri değiştirmek mümkün değildir.

Farklı betiklerde birden çok kesme noktasıyla çalışırken Breakpoints sekmesi, tüm kesme noktalarınızı tek bir yerden yönetebileceğiniz merkezi bir görünüm sunar.
Tek bir kesme noktasıyla çalışmak için:
Ctrl/Cmd+click veya Shift+click kullanarak birden çok kesme noktası seçin, ardından toplu işlemler yapmak için sağ tıklayın. Birden fazla kesme noktasının koşullarını aynı anda düzenleyebilir, etkinlik durumlarını değiştirebilir veya noktaları tamamen kaldırabilirsiniz.
Araç çubuğundaki düğmeler, tüm kesme noktalarını aynı anda etkinleştirmenizi, devre dışı bırakmanızı veya durumlarını tersine çevirmenizi sağlar. Bu, oyununuzu durmadan çalıştırmak istediğinizde ancak kesme noktalarının konumlarını kaybetmek istemediğinizde yararlıdır. Hata ayıklama oturumunuz bittiğinde tümünü kaldırabilirsiniz.
Lua, bazı durumlarda, özellikle Lua ortamınızın iç yapısını incelemeniz gerektiğinde yararlı olan bir hata ayıklama kütüphanesiyle gelir. Bu konuda daha fazla bilgiyi Lua kılavuzundaki hata ayıklama kütüphanesi bölümünde bulabilirsiniz.
Bir hatayla karşılaşırsanız veya oyununuz beklendiği gibi davranmazsa aşağıdaki hata ayıklama kontrol listesini izleyin:
Konsol çıktısını kontrol edin ve çalışma zamanı hatası olmadığını doğrulayın.
Kodun gerçekten çalıştığını doğrulamak için kodunuza print ifadeleri ekleyin.
Kod çalışmıyorsa çalışması için düzenleyicide gereken ayarları doğru yaptığınızı kontrol edin. Betik doğru oyun nesnesine eklenmiş mi? Betiğiniz girdi odağını (input focus) almış mı? Girdi tetikleyicileri (input trigger) doğru mu? Gölgelendirici kodu materyale eklenmiş mi? Ve benzeri.
Kodunuz değişkenlerin değerlerine bağlıysa (örneğin bir if ifadesinde) bu değerleri kullanıldıkları veya kontrol edildikleri yerde print ile yazdırın ya da hata ayıklayıcıyla inceleyin.
Bazen bir hatayı bulmak zor ve zaman alıcı bir süreç olabilir. Bu süreç, kodunuzu parça parça gözden geçirmenizi, her şeyi kontrol etmenizi, hatalı kodun kapsamını daraltmanızı ve hata kaynaklarını elemenizi gerektirir. Bunu en iyi şekilde yapmak için “böl ve yönet” adlı yöntem kullanılır:
İyi avlar!
Fizikle ilgili sorunlar yaşıyorsanız ve çarpışmalar beklendiği gibi çalışmıyorsa fizik hata ayıklamasını etkinleştirmeniz önerilir. game.project dosyasının Physics bölümündeki Debug onay kutusunu işaretleyin:

Bu onay kutusu etkinleştirildiğinde Defold, tüm çarpışma şekillerini ve çarpışmaların temas noktalarını çizer:
