- Katılım
- 6 Kas 2021
- Mesajlar
- 3,088
- Tepkime puanı
- 4,620
- Puanları
- 113
- Yaş
- 31
- Konum
- Türkiye
- Dc
- fatihbulut
Metin2 Sunucu Sahiplerinin Kabusu: Core Hataları ve Çözüm Rehberi
Metin2 sunucu yönetiyorsanız, “core verdi”, “server core dumped” veya sadece “core” gibi uyarılar, sunucunuzun aniden çökmesine neden olabilir. Bu hatalar genellikle arkasında net bir kayıt bırakmaz ve çözümü karmaşık görünür.
Bu rehberde, Metin2 core hatası nedir, neden oluşur ve nasıl analiz edilip çözülür, adım adım öğreneceksiniz.
Core Dosyası Nedir?
Core dosyası, sunucu programınızın (game dosyası) çöktüğü andaki hafızasının bir “fotoğrafıdır”. Tıpkı kaza sonrası olay yeri incelemesi gibi, programın içinde neler olup bittiğini gösterir.
- Hangi fonksiyon çalışıyordu?
- Hangi değişkenler kullanılıyordu?
- Hatanın kaynağı neresiydi?
Adım 1: Core Dosyasını Bulmak ve Hazırlanmak
Core dosyaları genellikle çöken game dosyasının bulunduğu klasörde oluşur. FreeBSD sunucularda tipik dizinler:
Kod:
/usr/game/g1/
/usr/game/share/
Dosya isimleri genellikle:
Kod:
g1.core, auth.core, db.core
Dikkat Edilmesi Gereken Nokta:
Analiz yapabilmek için core dosyasını oluşturan debug sembolleri içeren game dosyasına ihtiyacınız vardır.
- Eğer derlerken -g parametresini kullanmadıysanız, elde edeceğiniz bilgiler anlamsız olur.
- Genellikle dosya adı: game_debug veya game.dbg.
Adım 2: GDB ile Core Analizi
FreeBSD’de standart hata ayıklama aracı GDB (GNU Debugger)’dır.
- Sunucunuza SSH ile bağlanın.
- Core dosyasını analiz etmek için komutu girin:
Kod:
gdb /usr/game/g1/game_debug /usr/game/g1/g1.core
Not: Yolları kendi sunucunuzdaki konumlara göre değiştirin.
GDB açıldığında, size bir komut satırı sunacaktır.
Adım 3: Suçluyu Bulmak – Backtrace Komutu
Core hatasının nedenini bulmak için GDB içinde bt komutunu kullanın:
Kod:
bt
Kod:
bt full
Bu komut, çökme anına yol açan fonksiyon çağrılarını listeleyerek hatanın kaynağını gösterecektir.
Örnek Çıktı:
Kod:
#0 0x080a4b9c in CInputMain::Analyze (this=0xbfbfd5f0, d=0x83e2b40,
c_pData=0x96f6e01 "", uiBytes=4) at input_main.cpp:115
#1 0x081f9b3b in CInputProcessor::Process (this=0x83e2b40,
lpDesc=0x92f6d80, c_pData=0x96f6e00 "", iBytes=5,
piExtraBytes=0xbfbfd64c) at input.cpp:55
#2 0x08169d25 in CHARACTER::PointChange (this=0x94b4a00, a_pkChr=0x96d0e00,
a_points=100, a_bAmount=1 ' ', a_bBroadcast=false) at char_point.cpp:150
Bu örnekte hata, char_point.cpp dosyasının 150. satırındaki PointChange fonksiyonunda meydana gelmiş. Kaynak kodunuzda o satıra giderek problemi analiz edebilirsiniz.
En Sık Karşılaşılan Core Sebepleri
- Null Pointer: Olmayan veya silinmiş bir nesneye erişmek.
- Eksik/Hatalı Database Sorguları: Kod veriyi kontrol etmeden kullanıyor.
- Yanlış Fonksiyon Parametreleri: Beklenmeyen tür veya sayıda parametre gönderilmesi.
- Hatalı Quest Fonksiyonları: Lua’dan C++ tarafına hatalı veri aktarımı.
Core Hatalarını Önlemenin İpuçları
- Kodda null kontrolü yapın.
- Database sorgularında eksik veri kontrolü ekleyin.
- Fonksiyon parametrelerini doğrulayın.
- Quest fonksiyonlarını test ortamında sık sık kontrol edin.