6 entry daha
  • debug modunda hiçbir sorun çıkarmadan aylar boyunca binlerce kere çalışan kodun release aşamasında durup dururken uygulamayı sapıttırıp yanlış sonuçlara yol açması da mümkündür. yerini bulmak da kolay olmuyor tabii son ana bırakınca... (bkz: hayatin kararması)

    geliştirme işlemini bir debug bir release şeklinde sürdürmeliymişiz demek ki.

    ekleme: 5 sene önce girdiğim bu entry'e şans eseri denk geldim. bu olay başıma geldiğimdeki stres hala aklımda.

    üzerinde çalıştığım proje, c++ ile geliştirilen bir adet 3d multiplayer third person shooter bitirme projesiydi. client-server mimarisine sahip bu yapıda, oyuncular kendi haritalarını yaratıp, bu haritalarda arkadaşlarıyla oynayabiliyorlardı. oyun odası yaratan client, yaratım aşamasında, kendi yarattığı yeni haritayı server'a upload ediyor ve tüm oyuncular odaya girdikten sonra verilen start komutuyla birlikte diğer client'lar server'dan harita dosyasını asenkron olarak indiriyorlardı. ardından da harita ve resource'lar yüklenip oyun başlıyordu.

    entersan bir şekilde, 100 kere test edilip çalıştığı görülen bu son aşama, release build aldıktan sonra, projenin sunumundan birkaç gün önce, takım halinde test ederken patır patır segmentation fault bırakmaya başladı. sadece release build ile reproduce edilebildiği için de debug etmesi çok zordu.

    ertesi gün sabahtan akşama kadar ilgili kısmı gözden geçirip, problemin asenkron olarak yüklenen haritadan kaynaklanığını farketmiştim. dosya indirildikten sonra, network thread'inden cağrılan callback methodu, graphics thread'inin elleştiği bir resource'a müdahale ederken race condition oluşturuyordu (ya da onun gibi birşey). problemin tespitinden sonra, function pointer'larını bir queue'ya atıp, her şeyi sırasıyla graphics thread'inde execute eden bir scheduler yazdığımı hatırlıyorum.

    olayın çözüldüğünü gördüğümde, sağ gözümden bir damla yaş gelmişti...

    patlamanın neden sadece release build'de olduğuna değinecek olursak; debug kodu release'e göre çok daha yavaş olduğu için, graphics thread daha render aşamasına geçemeden dosya serverdan indiriliyor, gerekli kaynaklar yükleniyor ve graphics kısmı render'a sorunsuz bir şekilde başlıyordu. release'de ise, dosya, render başladıktan sonra indirilmiş oluyor, kaynakları yükleyeyim derken de işi eline yüzüne bulaştırıyordu.
5 entry daha
hesabın var mı? giriş yap