Metin2 Hata Çözümleri Rehberi: Syserr Analizi ve GDB ile Core Çözme
Metin2 geliştiriciliğinde (developer) yeni sistemler eklemek kadar, eklenen bu sistemlerin yol açtığı teknik arızaları, sunucu çökmelerini ve istemci kilitlenmelerini tespit edip düzeltmek de hayati önem taşır. Bir pvp server projesinde kararlılığı sağlamanın tek yolu, ortaya çıkan hataları körü körüne tahmin etmek yerine resmi log (günlük) dosyalarını doğru okumaktır. Bu rehberde, Metin2 projelerinde karşılaşılan hata türlerini, syserr analizini ve sunucu çökmelerine (core dump) yol açan sorunları GDB ile ayıklama yöntemlerini ele alıyoruz.
İstemci ve Sunucu Syserr Günlüklerinin Mantığı
Metin2 altyapısında yaşanan her türlü yazılımsal ve grafiksel uyumsuzluk arka planda
syserr.txt veya syserr dosyalarına kaydedilir. Hata çözümlerinde ilk bakılması gereken yer burasıdır:Client Syserr: Oyuncunun bilgisayarındaki Metin2 klasöründe oluşur. Genellikle Python kodlarındaki hizalama (Tab/Space) hatalarını, eksik veya adı yanlış yazılmış görsel dokuları (
TGA/SUB), client source tarafındaki C++ çökme detaylarını raporlar. Satır satır incelendiğinde istemcinin neden hata vermeden kapandığını doğrudan gösterir.Server Syserr: Sunucu tarafında (FreeBSD) her kanalın (CH) ve veritabanının (
db) kendi klasöründe oluşur. Yanlış yazılmış veya derlenirken hata alınmış quest fonksiyonlarını, veritabanındaki tablo uyuşmazlıklarını, eksik veya hatalı yapılandırılmış item_proto / mob_proto satırlarını açıkça listeler. Kanalların neden açılmadığını veya neden kapandığını buradan görebilirsiniz.GDB ile Core (Sunucu Çökme) Analizi Nasıl Yapılır
Sunucu aniden kapandığında ve kanallar çöktüğünde (ch düşmesi yaşandığında), kanal klasörlerinin içerisinde
game.core adında yüksek boyutlu bir dosya oluşur. Bu dosya, oyun motorunun tam çökme anında RAM belleğindeki tüm verilerin bir anlık haritasıdır (core dump).Putty Üzerinden GDB Bağlantısı: Sunucunuzda
gdb aracının kurulu olması gerekir. Çökmenin kaynak koddaki (Source) tam olarak hangi fonksiyondan ve hangi satırdan kaynaklandığını bulmak için Putty terminalinden çökmenin yaşandığı klasöre gidilir.Komut Satırı Analizi: Terminale
gdb game game.core (veya sunucu yapınıza göre gdb game.core) yazarak analiz motoru başlatılır. Hata Ayıklama Komutu: GDB ekranı yüklendikten sonra terminale
bt veya backtrace yazıp Enter tuşuna basılır. Sistem bize çökme anında tetiklenen son fonksiyonları alt alta listeler. Satırların sonunda yer alan dosya adı ve numarasını (Örn: char_battle.cpp:1425) inceleyerek kaynak kodumuzun hangi satırda tıkandığını, hangi bellek işaretçisinin (pointer) boş (NULL) kalıp sunucuyu çökerttiğini nokta atışı tespit edebilir ve C++ source üzerinden düzeltebiliriz.