İçeriğe geç

Metin2 syserr Mesajları: Sık Görülen Hatalar Ne Anlama Gelir?

Hazırlayan: Metin2VIP Editörleri Yayın: 9 dk okuma

Kısaca: syserr, her Metin2 çekirdeğinin kendi klasörüne yazdığı hata günlüğüdür: db çekirdeği db klasörüne, auth ve kanal çekirdekleri kendi klasörlerine yazar. Her satır SYSERR, tarih ve hatayı üreten fonksiyonun adıyla başlar; aynı satır syslog'a da kopyalanır. Açılmayan bir çekirdekte önce syserr'in son satırlarına bakılır, ama CONFIG ve MySQL bağlantı hataları günlük açılmadan önce çıktığı için syserr'e değil ekrana yazılır.
İçindekiler
  1. syserr, syslog ve PTS arasındaki fark ne?
  2. Çekirdek açılmıyor ama syserr boş
  3. Açılışta sık görülen syserr mesajları
    1. mob table size error ve Unknown header
    2. cannot load DragonSoulTable
  4. Çalışırken görülen mesajlar
  5. İstemcideki syserr.txt

syserr, her Metin2 çekirdeğinin kendi klasörüne yazdığı hata günlüğüdür. db çekirdeği db klasörüne, auth ve kanal çekirdekleri kendi klasörlerine yazar; her satır SYSERR:, tarih ve hatayı üreten fonksiyonun adıyla başlar ve aynı satır syslog'a da kopyalanır. Açılmayan bir çekirdekte ilk bakılacak yer syserr'in son satırlarıdır. Bir istisna var: CONFIG ve MySQL bağlantı hataları günlük açılmadan önce çıktığı için syserr'e değil ekrana yazılır.

Aşağıdaki mesajlar sunucu kaynağındaki sys_err(...) çağrılarından, koddaki yazımlarıyla seçildi; %s, %d gibi yerlere çalışırken dosya adı, numara ya da isim gelir. Değerler ve dosya yolları serverden servere değişebilir, mesaj metinleri bu kaynağı kullanan çekirdeklerde aynıdır. Klasör düzeni Metin2 server dosyaları yazısında.

syserr, syslog ve PTS arasındaki fark ne?

Üç dosyayı da çekirdek kütüphanesi libthecore/src/log.c açar; FreeBSD'de adları syslog, syserr ve PTS, Windows derlemesinde .txt uzantılıdır (log.c:10-18).

Dosya İçeriği Ömrü
syserr Yalnız sys_err satırları Sona eklenerek açılır, döndürülmez; temizlenene kadar büyür
syslog sys_log satırları ve bütün sys_err satırlarının kopyası Her saat log/YYYYAAGG/syslog.SS adıyla taşınır, gün değişince 3 gün önceki klasör silinir
PTS Başarım izi (pt_log) Her açılışta sıfırlanır; oyun çekirdeğinde ENABLE_PTLOG kapalı olduğu için boş kalır

_sys_err her satırı önce syserr'e, sonra syslog'a yazar (log.c:109-141); saatlik taşıma yalnız syslog'a uygulanır (log.c:99-106, :390-451). sys_log(0, ...) satırları her zaman yazılır, diğer seviyeler çekirdeğin -l seçeneğiyle açılır (log.c:188-193, game/src/main.cpp:659-664). Bu kaynakta açık gelen ENABLE_SYSLOG_PACKET_SENT, istemciye giden her paket için SENT HEADER : %u to %s (size %d) satırını seviye 0 ile yazar (desc.cpp:431-434); canlı sunucuda syslog'u hızla büyüttüğü için kapatılması mantıklıdır.

Bir syserr satırı şöyle görünür:

SYSERR: Oct 18 21:30:41 :: ReadSpecialDropItemFile: ReadSpecialDropItemFile : there is no item 99999 : node Yeni_Sandik
SYSERR: Oct 18 21:30:41 :: Boot: cannot load SpecialItemGroup: locale/turkey/special_item_group.txt

:: işaretinden sonraki ilk kelime fonksiyonun sınıfsız adıdır (Boot, CInputDB::Boot demektir); satır numarası yazılmaz (log.c:122). Mesajın sabit kısmını game/src ve db/src içinde grep ile aramak çağrının yerini bulur. Quest fonksiyonlarındaki sys_err çağrıları QuestError üzerinden geçer (questlua.cpp:21-26); TEST_SERVER açıksa aynı hata oyuncuya grup sohbetinden error occurred on [%s:%d] diye de gider (questmanager.cpp:1742-1761).

Çekirdek açılmıyor ama syserr boş

Oyun çekirdeği CONFIG'i config_init ile okur (main.cpp:709), günlük dosyalarını ise ondan sonra thecore_init içinde açar (main.cpp:719, libthecore/src/main.c:64). Dosya açılmadan çağrılan sys_err hiçbir şey yazmaz (log.c:118-119); bu yüzden CONFIG ve MySQL bağlantı hataları fprintf(stderr, ...) ile ekrana yazılır ve çekirdek exit(1) ile kapanır. DB_PORT not configured, HOSTNAME must be configured. ve cannot start server while no common sql connected bu türdendir (config.cpp:510, 1623, 1635). Çekirdek daha sonra kendi standart çıktısını klasördeki stdout dosyasına yönlendirir (main.cpp:716-717), standart hata ise ekranda kalır.

db çekirdeğinde de Loading conf.txt failed. ve Could not load mob_proto.txt. Wrong file format? gibi satırlar ekrana yazılır (db/src/Main.cpp:136, ClientManagerBoot.cpp:225). Bu iletilerin tablosu server kurulumu, CONFIG satırları CONFIG ayarları, conf.txt satırları db conf.txt yazısında. Çekirdek sessizce kapanıyorsa onu yönetim betiği yerine kendi klasöründe elle başlatıp ekrandaki son satıra bakmak en hızlı yoldur.

Açılışta sık görülen syserr mesajları

Mesaj Nerede Anlamı, bakılacak yer
InitializeMobTable FAILED, InitializeItemTable FAILED db InitializeTables, ClientManagerBoot.cpp:23, 32 Proto okunamadı; ekrandaki "Wrong file format?" satırına ve db klasöründeki txt dosyalarına bak
ItemProto Reading Failed : Invalid value. (index: %d, col: %d, value: %s) db Set_Proto_Item_Table, ProtoReader.cpp:1134 item_proto.txt'de tanınmayan tür ya da efsun adı; col sütun numarasıdır
no result from item_attr, no result from skill_proto db InitializeItemAttrTable, InitializeSkillTable, ClientManagerBoot.cpp:638, 519 Tablo boş ya da sorgu hata verdi; hemen üstteki AsyncSQL satırı nedeni söyler
InitializeShopTable : Table count is zero. db InitializeShopTable, ClientManagerBoot.cpp:275 shop tablosu boş
InitializeLocalization() ==> DirectQuery failed(%s) db InitializeLocalization, ClientManager.cpp:3464 common veritabanındaki locale tablosu boş
SQL_PLAYER not configured (ACCOUNT, COMMON, HOTBACKUP) db Start, Main.cpp:282, 309, 336, 365 conf.txt'de satır yok
mob table size error, item table size error game Boot, input_db.cpp:562, 584 game ile db farklı tables.h ile derlenmiş; ikisini birlikte derle
cannot load SpecialItemGroup: %s game Boot, input_db.cpp:981 Kutu grubu dosyası okunamadı; sebep bir üstteki satırda. CommonDropItem, ETCDropItem, DropItemGroup, MOBDropItemFile için aynı biçim (:957-995)
No such an item (name: %s) game ReadCommonDropItemFile, ReadEtcDropItemFile, item_manager_read_tables.cpp:85, 509 common_drop_item ya da etc_drop_item'daki ad item_proto'da yok
ReadSpecialDropItemFile : there is no item %s : node %s game ReadSpecialDropItemFile, item_manager_read_tables.cpp:261 special_item_group'taki numara item_proto'da yok; node grup adıdır
ReadMonsterDropItemGroup : Syntax error %s : invalid type %s (kill|drop), node %s game ReadMonsterDropItemGroup, item_manager_read_tables.cpp:820 mob_drop_item'da Type değeri yanlış ya da büyük harfle yazılmış
Invalid group syntax token size: %u != 2 (DO NOT SPACE IN NAME) game LoadGroup, text_file_loader.cpp:77 Grup adında boşluk var; çekirdek hemen çıkar
cannot load MapIndex: %s game Boot, input_db.cpp:1003 map/index'teki bir haritanın Setting.txt'si yok (cannot open file: %s) ya da MapSize/CellScale eksik (Invalid Settings file: %s, sectree_manager.cpp:182, 211)
CHECK! 'Setting.txt' and 'server_attr' MAP_SIZE!! game LoadAttribute, sectree_manager.cpp:428 server_attr ile Setting.txt'deki harita boyu uyuşmuyor
read_line: unknown regen type %c game read_line, regen.cpp:125 Regen satırında tür harfi yanlış ya da satır eksik alanlı; çekirdek çıkar
In %s, No mob data by vnum %u game regen_load_in_file, regen.cpp:567 Regen satırındaki canavar mob_proto'da yok; satır atlanır
LoadGroup : Syntax error %s : no leader vnum, node %s game LoadGroup, mob_manager.cpp:342 group.txt'de lider satırı eksik; grup yüklenmez
cannot load DragonSoulTable: %s game Boot, input_db.cpp:1011 dragon_soul_table.txt denetimi geçmedi; çekirdek kapanmaz
LOAD_QUESTLIB_FAILURE(%s) game InitializeLua, questlua.cpp:761 questlib.lua hatalı; settings.lua, translate.lua ve locale.lua için LOAD_SETTINS_FAILURE, LOAD_TRANSLATE_ERROR, LoadQuestLocale(%s) FAILURE. Çekirdek çıkar
QUEST wrong quest state file for quest %s game BuildStateIndexToName, questlua.cpp:628 object/state'teki dosya bozuk ya da adı quest adıyla uyuşmuyor; questleri yeniden derle
Motion: %s have not motlist.txt vnum(%d) folder(%s) game GetMotionFileName, motion.cpp:128 share/data/monster/<klasör>/motlist.txt yok; klasör adı mob_proto'dan gelir

Drop ve kutu dosyalarında hata çoğunlukla iki satırdır: alttaki cannot load ... hangi dosyanın okunamadığını, üstteki satır hangi ad ya da grubun sorun çıkardığını söyler. syslog'daki LoadLocaleFile: SpecialItemGroup: %s gibi satırlar da çekirdeğin hangi dosyada durduğunu gösterir. Dosyaların biçimi drop dosyaları, harita klasörü harita ekleme, regen satırları regen dosyaları yazısında.

mob table size error ve Unknown header

Bu iki mesaj dosya değil derleme sorunudur. db her tablonun yapı boyunu açılış paketine yazar, oyun çekirdeği kendi boyuyla karşılaştırır (db/src/ClientManager.cpp:447-453, input_db.cpp:560-587). İki taraftan biri farklı bir service.h ya da tables.h ile derlendiyse çekirdek bu satırla kapanır. db'nin syserr'indeki Unknown header (header: %d handle: %d length: %d) (ClientManager.cpp:2879) ve oyun çekirdeğindeki in InputDB: UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, DESC: %d (input_db.cpp:2569) aynı uyuşmazlığın paket tarafıdır. Nedenleri sistem ekleme hataları yazısında.

cannot load DragonSoulTable

Simya tablosu okunamazsa çekirdek kapanmaz, kapatma satırları kodda yorumdadır (input_db.cpp:1009-1014). Üstteki satırlar eksik grubu söyler, ör. In %s group of ApplyNumSettings, values in Grade(%s) row is invalid. (dragon_soul_table.cpp:293). ENABLE_DS_GRADE_MYTH açık derlenmiş bir çekirdek her grupta altıncı derecenin (grade_myth) satır ve sütununu arar (dragon_soul_table.cpp:14-16, 719-724); beş dereceli bir tabloyla açılırsa denetim yarıda kalır ve dosyanın geri kalanı da denetlenmez. Simyanın oyuncu tarafı simya sistemi yazısında.

Çalışırken görülen mesajlar

Mesaj Nerede Anlamı, bakılacak yer
UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, fd: %d game Process, input.cpp:85 İstemcinin paketi tanınmadı, bağlantı kapandı; LAST HEADER boyu yanlış paket
LUA_ERROR: %s ve LUA_ERROR: quest %s.%s %s game RunState, questlua.cpp:1040; WriteRunningStateToSyserr, questmanager.cpp:1736 Quest çalışırken koptu; ikinci satır quest, durum ve olay
QUEST NOT END RUNNING on Login/Logout - %s game HandleReceiveAllEvent, questnpc.cpp:657 login ya da logout olayında bekleten çağrı
cannot find map location index %d x %d y %d name %s game WarpSet, char.cpp:5423 Işınlanılan haritayı açan çekirdek yok
location %d %d not allowed to login this server game WarpEnd, char.cpp:5510 Oyuncu, haritası MAP_ALLOW'da olmayan çekirdeğe geldi; bu kaynakta köye gönderilir
cannot create item by vnum %u (name %s id %u) game ItemLoad, input_db.cpp:1535 Karakterin eşyası item_proto'da yok; eşya yüklenmez
invalid item vnum %u in safebox: login %s db RESULT_SAFEBOX_LOAD, ClientManager.cpp:760 Depoda proto'da olmayan eşya var; bu açılışta item_award teslimi atlanır
EquipTo: invalid wear cell (this: #%d %s wearflag: %d cell: %d) game EquipTo, item.cpp:970 Kayıtlı yuva numarası WEAR_MAX_NUM dışında; çoğu zaman bir bayrak kapatıldıktan sonra
AsyncSQL: query failed: %s (query: %s errno: %d) ChildLoop, libsql/AsyncSQL.cpp:564 MySQL hatası; sorgu metni ve MySQL'in kendi iletisi satırdadır

LUA_ERROR iki satır olarak okunur: ilki Lua'nın iletisi (çağrılan fonksiyon nil, yanlış tipte argüman), ikincisi quest adı.durum olay biçiminde nerede koptuğu. TEST_SERVER açıkken aynı satır oyuncunun ekranına da düşer. Quest'in yapısı ve olaylar quest yazma yazısında.

MySQL hataları libsql katmanından gelir. Doğrudan sorgular AsyncSQL::DirectQuery : mysql_query error: %s ile (AsyncSQL.cpp:268), arka plandaki sorgular AsyncSQL: query failed ile yazılır; bağlantı koptuğunda ve birkaç başka MySQL hatasında sorgu AsyncSQL: retrying satırıyla yeniden denenir (:567-586). 0,5 saniyeden uzun süren sorgular da syslog'a [QUERY : LONG INTERVAL(OverSec %ld.%ld)] : %s olarak düşer (:530, :593-595). Eksik sütun ya da tablo hataları, bir bayrağın veritabanı güncellemesi yüklenmeden açıldığını gösterir. Tablolar Metin2 veritabanları yazısında.

İstemcideki syserr.txt

İstemci de kendi syserr.txt dosyasını yazar: OpenLogFile, standart hatayı her açılışta sıfırlanan syserr.txt'ye yönlendirir, TraceError her satırı ay gün saat:dakika:milisaniye :: ileti biçiminde ekler (EterBase/Debug.cpp:198-236, 306-316). Bu iki fonksiyon _DISTRIBUTE tanımlıyken susar; projelerin hiçbiri bunu tanımlamadığı için Release derlemesi de yazar. Geliştiricinin en sık göreceği satırlar Unknown packet header: %d, last: %d %d (paket tanımları sunucuyla aynı değil, PythonNetworkStream.cpp:549), CPythonItem::LoadItemTable: invalid item_proto[%s] STRIDE[%d] != sizeof(SItemTable) (GameLib/ItemManager.cpp:286) ve Failed to load script file : %s (root/ui.py:3535) satırlarıdır. Oyuncunun gördüğü kutular ve yükleme ekranı hataları istemci hataları yazısında.

Sık sorulan sorular

syserr dosyası nerede?
Her çekirdeğin çalıştığı klasörde: db çekirdeği için db klasöründe, auth için auth klasöründe, kanal çekirdekleri için chan/ch1/core1 gibi klasörlerde. Windows'ta derlenen çekirdek aynı dosyayı syserr.txt adıyla yazar.
Çekirdek açılmıyor ama syserr boş, neden?
CONFIG ve SQL bağlantı satırları günlük dosyaları açılmadan önce okunur. Bu aşamadaki hatalar syserr'e değil, başlatma komutunun çalıştığı ekrana yazılır; çekirdeği elle başlatıp ekrandaki son satıra bakmak gerekir.
syserr neden hiç küçülmüyor?
Saatlik döndürme yalnız syslog'a uygulanır; syserr sona eklenerek açılır ve kendiliğinden taşınmaz ya da silinmez. Paketteki clear.py ya da yönetim panelinin log temizleme seçeneği dosyayı siler.
Hata satırında satır numarası yok, kaynakta nasıl bulurum?
Satırda yalnız fonksiyonun adı yazar. Mesajın sabit kısmını, sayılar ve adlar dışındaki metni, game/src ve db/src içinde grep ile aramak tek bir sys_err çağrısına götürür.

İlgili sayfalar

Kategori: Server Kurma Kaynak Kod geliştirici hata syserr syslog sunucu

Bu sayfadaki bilgiler Metin2'nin sunucu yazılımındaki hesaplamalara ve standart oyun dosyalarına dayanır. Oyun dosyalarını değiştiren sunucularda değerler farklı olabilir. İçerikleri nasıl hazırlıyoruz?

Bu sayfa işine yaradı mı?

Giriş yap, oy ver ya da sayfayı kaydet. Okumak için üyelik gerekmez. WhatsApp X'te paylaş
Yanlış ya da eksik bir bilgi mi gördün? Bildir
Neyin yanlış olduğunu, doğrusunun ne olduğunu ve bunu nereden bildiğini yaz. Mesajın editörlere gider; yazı, kontrol edildikten sonra düzeltilir.
Yalnız editör görür.

Tartışma

Kurallar

Henüz yorum yok. Bu konuda bir deneyimin ya da sorun varsa ilk yorumu sen yaz.

Giriş yap ya da kayıt ol, sonra yorum yaz. Metin2VIP üyeliği hiçbir oyun sunucusunun hesabı değildir.