İlan
04 Haz 2026 23 çevrimiçi üye Duyurular
Ana Sayfa Metin2 Private Server Kurulumu
Ana Sayfa Forum Metin2 Private Server Kurulumu Metin2 Sunucu Sahiplerinin Kaderi: "Özelleşti...
İlan Yan banner placeholder

Metin2 Sunucu Sahiplerinin Kaderi: "Özelleştirme" Hataları ve Adım Adım Kılavuzu

BarisAnikk 26.04.2026 15:44 551 görüntüleme 8 cevap
Son Mesaj
BarisAnikk
Üye
Üye
Katılım13 Mar 2026
Konular8
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
26.04.2026 15:44 #1

Metin2 Sunucu Sahiplerinin Kabusu: 'Core Veren' Hatalar ve Adım Adım Çözüm Yöntemleri​

Eğer bir Metin2 sunucusu yönetiyorsanız, "core verdi", "server core dumped" veya sadece "core" gibi ifadeleri duymak kadar can sıkıcı çok az şey vardır. Bu hatalar, sunucunuzun aniden çökmesi ve genellikle arkasında ne olduğuna dair net bir syserr.txt kaydı bırakmaması anlamına gelir. Peki bu gizemli "core" dosyası nedir ve bu kabusu nasıl bir çözüme kavuşturabiliriz?

Bu rehberde, yeni başlayanlar için bile anlaşılır bir dille, core hatasının ne olduğunu ve bu hatayı nasıl analiz edip çözebileceğinizi adım adım anlatacağız.

Core Dosyası Nedir? Bir Olay Yeri Raporu

Bir core dosyası, sunucu programınızın (game dosyası) çöktüğü andaki hafızasının bir "fotoğrafıdır". Tıpkı bir kaza sonrası olay yeri incelemesi gibi, bu dosya da çökme anında programın içinde neler olup bittiğine dair tüm kanıtları içerir. Hangi fonksiyonun çalıştığını, hangi değişkenlerin kullanıldığını ve en önemlisi, hatanın tam olarak nerede meydana geldiğini bu dosyayı inceleyerek bulabiliriz.

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 bu genellikle /usr/game/g1/ veya /usr/game/share/ gibi bir dizindir.
  • g1.core, auth.core veya db.core gibi isimlerle karşılaşabilirsiniz.
  • Çok Önemli: Analiz yapabilmek için, bu core dosyasını oluşturan game dosyasının debug sembolleri içeren bir versiyonuna ihtiyacınız var. Eğer dosyalarınızı derlerken -g parametresini kullanmadıysanız, elde edeceğiniz bilgiler anlamsız olacaktır. Genellikle "game_debug" veya "game.dbg" adıyla bu dosya elinizde bulunur.

Adım 2: Olay Yeri İncelemesi - GDB ile Core Analizi

FreeBSD'nin standart hata ayıklama aracı olan gdb (GNU Debugger) ile core dosyasını analiz edeceğiz. Sunucunuza SSH ile bağlandıktan sonra aşağıdaki komutu girin:
Bash:
gdb /usr/game/g1/game_debug /usr/game/g1/g1.core
Not: Yukarıdaki yolları kendi sunucunuzdaki game_debug ve core dosyasının konumuna göre değiştirmeyi unutmayın.
Bu komutu girdiğinizde, gdb programı açılacak ve size bir komut satırı sunacaktır.

Adım 3: Suçluyu Bulmak - "Backtrace" Komutu

gdb açıldıktan sonra, en önemli komutu girme zamanı geldi. Bu komut, çökme anına yol açan fonksiyon çağrılarının bir listesini, yani "suçun izini" bize gösterecektir.

Komut satırına şunu yazın ve Enter'a basın:

Bash:
bt

veya daha detaylı bir çıktı için:

Bash:
bt full

Karşınıza, en üstte hatanın oluştuğu an olmak üzere, aşağıya doğru giden bir fonksiyon listesi çıkacaktır. Bu listenin en üst sıralarındaki satırlar, hatanın kaynağını size söyleyecektir.

Örnek Bir Çıktı ve Yorumlama:

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ş. Bu bilgiyle, doğrudan kaynak kodunuzda o satıra giderek neyin yanlış olduğunu (örneğin, olmayan bir karaktere puan vermeye çalışmak gibi) analiz edebilir ve sorunu çözebilirsiniz.

En Sık Karşılaşılan Core Sebepleri

  • Null Pointer: Olmayan veya silinmiş bir nesneye (karakter, item, NPC) erişmeye çalışmak. bt çıktısında genellikle -> operatörünün kullanıldığı satırlarda görünür.
  • Eksik veya Hatalı Database Sorguları: Database'den çekilen bir verinin eksik olması ve kodun bu durumu kontrol etmemesi.
  • Yanlış Fonksiyon Parametreleri: Bir fonksiyona beklemediği türde veya sayıda parametre göndermek.
  • Hatalı Quest Fonksiyonları: Lua tarafından C++ tarafına gönderilen hatalı veriler.
Bu adımları izleyerek, sunucunuzu çökerten o gizemli "core" hatalarının kökenine inebilir ve sunucunuzu çok daha stabil bir hale getirebilirsiniz. Unutmayın, her core dosyası, çözülmeyi bekleyen bir bulmacadır.
BarisAnikk
Üye
Üye
Katılım13 Mar 2026
Konular8
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
04.05.2026 08:38 #2
Paylaşım için teşekkürler.

"Bir core dosyasını analiz ederken, hata ayıklayıcının (gdb) çökme anındaki hafıza dökümünü doğru...
Twobb
Üye
Üye
Katılım09 Oca 2026
Konular10
Mesajlar59
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 09:12 #3
paylaşım için teşekkürler.
Halil_der
Üye
Üye
Katılım28 Şub 2026
Konular5
Mesajlar35
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 17:14 #4
Genelde gamenin build oldugu freebsdde çalışıyor.belki freebsd surumuyle alakalidir
BarisAnikk
Üye
Üye
Katılım13 Mar 2026
Konular8
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
09.05.2026 06:38 #5
Genelde gamenin build oldugu freebsdde çalışıyor.belki freebsd surumuyle alakalidir


Merhaba,

Yorumun ve katkın için çok teşekkürler. Belirttiğin nokta inanılmaz derecede önemli ve kesinlikle doğru.

Bir core dosyasını analiz ederken, hata ayıklayıcının (gdb) çökme anındaki hafıza dökümünü doğru yorumlayabilmesi için, çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir.

Senin de dediğin gibi, eğer game dosyası FreeBSD 9.3 üzerinde derlendiyse (build edildiyse), o game dosyasının oluşturduğu core dosyasını en sağlıklı şekilde yine FreeBSD 9.3 üzerinde çalışan bir gdb ile analiz edebilirsiniz. Farklı bir sürüm (örneğin FreeBSD 12) kullanmak, gdb'nin adresleri veya kütüphane fonksiyonlarını yanlış yorumlamasına ve anlamsız çıktılar vermesine neden olabilir.

Bu yüzden en temiz ve kesin çözüm, gdb analizini her zaman çökmenin yaşandığı sunucunun doğrudan kendi üzerinde yapmaktır. Bu, tüm sistem bileşenlerinin (işletim sistemi, kütüphaneler, game dosyası ve core dosyası) birbiriyle %100 uyumlu olmasını garantiler.

Bu önemli detayı vurguladığın için tekrar teşekkürler.
ErenCEYLAN
Üye
Üye
Katılım12 Ara 2025
Konular8
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
09.05.2026 15:09 #6
Paylaşım için teşekkürler.

"Bir core dosyasını analiz ederken, hata ayıklayıcının (gdb) çökme anındaki hafıza dökümünü doğru yorumlayabilmesi için, çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir." -> Bu tam olarak doğru değil, benim build aldığım sunucu ve test sunucum farklı, core dosyasını iki ortamda da sorunsuz şekilde açabiliyorum. Aynı paylaşılan kütüphaneler ve aynı mimari olması gerekli sadece.
BarisAnikk
Üye
Üye
Katılım13 Mar 2026
Konular8
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
09.05.2026 19:54 #7
Paylaşım için teşekkürler.

"Bir core dosyasını analiz ederken, hata ayıklayıcının (gdb) çökme anındaki hafıza dökümünü doğru yorumlayabilmesi için, çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir." -> Bu tam olarak doğru değil, benim build aldığım sunucu ve test sunucum farklı, core dosyasını iki ortamda da sorunsuz şekilde açabiliyorum. Aynı paylaşılan kütüphaneler ve aynı mimari olması gerekli sadece.


Bu son derece yerinde ve konuyu bir üst seviyeye taşıyan harika yorumun için çok teşekkürler.

Teknik olarak %100 haklısın. Biz rehberde, özellikle yeni başlayanlar için en garantili ve en kolay yolu sunmak amacıyla "çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir" ifadesini basitleştirerek kullandık. Bu yöntem, senin de belirttiğin o kritik şartları otomatik olarak sağladığı için en risksiz yoldur.

Senin de mükemmel bir şekilde vurguladığın gibi, işin teknik özü şudur: gdb'nin bir core dosyasını doğru yorumlayabilmesi için olmazsa olmaz iki şart, analiz yapılan ortamdaki mimari yapının (amd64, i386 vb.) ve game dosyasının kullandığı paylaşılan kütüphanelerin (.so dosyaları), çökmenin yaşandığı ortamdakiyle birebir aynı olmasıdır.

Senin build ve test sunucun arasında sorunsuz çalışmasının sebebi de bu iki ortamın bu temel uyumluluğu paylaşmasıdır.

Bu çok değerli teknik detayı ekleyerek konunun derinliğini artırdığın için tekrar teşekkür ederim. Bu sayede hem yeni başlayanlar en güvenli yolu, hem de senin gibi tecrübeli kullanıcılar işin teknik çekirdeğini net bir şekilde görmüş oldu.
BarisAnikk
Üye
Üye
Katılım13 Mar 2026
Konular8
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
09.05.2026 20:23 #8
Paylaşım için teşekkürler.

"Bir core dosyasını analiz ederken, hata ayıklayıcının (gdb) çökme anındaki hafıza dökümünü doğru yorumlayabilmesi için, çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir." -> Bu tam olarak doğru değil, benim build aldığım sunucu ve test sunucum farklı, core dosyasını iki ortamda da sorunsuz şekilde açabiliyorum. Aynı paylaşılan kütüphaneler ve aynı mimari olması gerekli sadece.


Bu son derece yerinde ve konuyu bir üst seviyeye taşıyan harika yorumun için çok teşekkürler.

Teknik olarak %100 haklısın. Biz rehberde, özellikle yeni başlayanlar için en garantili ve en kolay yolu sunmak amacıyla "çökmenin yaşandığı ortamla birebir aynı ortamda çalıştırılması gerekir" ifadesini basitleştirerek kullandık. Bu yöntem, senin de belirttiğin o kritik şartları otomatik olarak sağladığı için en risksiz yoldur.

Senin de mükemmel bir şekilde vurguladığın gibi, işin teknik özü şudur: gdb'nin bir core dosyasını doğru yorumlayabilmesi için olmazsa olmaz iki şart, analiz yapılan ortamdaki mimari yapının (amd64, i386 vb.) ve game dosyasının kullandığı paylaşılan kütüphanelerin (.so dosyaları), çökmenin yaşandığı ortamdakiyle birebir aynı olmasıdır.

Senin build ve test sunucun arasında sorunsuz çalışmasının sebebi de bu iki ortamın bu temel uyumluluğu paylaşmasıdır.

Bu çok değerli teknik detayı ekleyerek konunun derinliğini artırdığın için tekrar teşekkür ederim. Bu sayede hem yeni başlayanlar en güvenli yolu, hem de senin gibi tecrübeli kullanıcılar işin teknik çekirdeğini net bir şekilde görmüş oldu.
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
İlan Yan banner placeholder