Muitas vezes o executável/distro do nosso OTServ, Theforgottenserver ou OTXServer, fecha do nada e nós não conseguimos descobrir os detalhes necessários para ter chance de corrigir. O GNU Debugger mais conhecido como GDB permite que façamos com que o nosso executável ao fechar inesperadamente gere um log da excessão que gerou o erro, vamos lá mão na massa.
Configuração
Para você utilizar o GDB é necessário que tenha conhecimento de como fazer uma conexão SSH via Putty, vou deixar abaixo o link do nosso guia de como utilizar.
Primeiro Passo – Instalando GDB
Antes de executar o comando para instalação, faça um update das bibliotecas.
apt-get update
Agora Instalar o GNU debugger é bem simples execute o comando abaixo.
apt-get install gdb
Segundo Passo – Ligar Servidor
Utilizando nosso painel você pode acessar o menu “painel de controle” e ligar o servidor a partir do botão indicado.
Segundo Passo – Utilizando
- Verifique qual o ID do processo gerado pelo otserv, execute o comando “pidof theforgottenserver“, anote o numero que irá aparecer na tela por ex. “4563“;
- Crie um arquivo no mesmo local onde está localizado o executável “theforgottenserver” com nome “core.pid” e insira o número obtido pelo passo anterior ex “4563” e salve o arquivo;
- Agora basta iniciarmos o GDB pelo comando “gdb theforgottenserver core.pid“, após isso aguarde alguns segundos;
- Utilize o comando “bt” após alguns segundos para receber um backtrace de erro;
Um exemplo de um backtrace de uma quebra:
#0 Npc::removeShopPlayer (this=0x1, player=0xb4b89ea0) at /usr/include/c++/4.3/bits/stl_list.h:649 649 { return iterator(this->_M_impl._M_node._M_next); } (gdb) bt #0 Npc::removeShopPlayer (this=0x1, player=0xb4b89ea0) at /usr/include/c++/4.3/bits/stl_list.h:649 #1 0x080c3321 in Npc::onPlayerEndTrade (this=0x1, player=0xb4b89ea0, buyCallback=-1266598056, sellCallback=-1277184960) at npc.cpp:2107 #2 0x0811c3d4 in Player::closeShopWindow (this=0xb4b89ea0) at player.cpp:1727 #3 0x080b2863 in Npc::closeAllShopWindows (this=0xcad8c48) at npc.cpp:2878 #4 0x080bd283 in Npcs::reload (this=0x8214498) at npc.cpp:57 #5 0x080f64f5 in TalkAction::reloadInfo (player=0xb27fded8, words=@0xb6a5f0f4, param=@0xb6a5f0f0) at talkaction.cpp:369 #6 0x080f6da4 in TalkActions::onPlayerSpeak (this=0x9b58f78, player=0xb27fded8, type=SPEAK_SAY, words=@0x9f0ae24) at talkaction.cpp:183 #7 0x080a5329 in Game::playerSay (this=0x8213e40, playerId=268568707, channelId=0, type=SPEAK_SAY, receiver=@0x9f0ae20, text=@0x9f0ae24) at game.cpp:3485 #8 0x08173455 in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<bool, boost::_mfi::mf5<bool, Game, unsigned int, unsigned short, SpeakClasses, std::string const&, std::string const&>, boost::_bi::list6<boost::_bi::value<Game*>, boost::_bi::value<unsigned int>, boost::_bi::value<unsigned short>, boost::_bi::value<SpeakClasses>, boost::_bi::value<std::string>, boost::_bi::value<std::string> > >, void>::invoke (function_obj_ptr=@0xc1a5bec) at /usr/include/boost/bind/mem_fn_template.hpp:604 #9 0x080fdb41 in boost::function0<void, std::allocator<void> >::operator() (this=0xc1a5be8) at /usr/include/boost/function/function_template.hpp:825 #10 0x080fce3b in Dispatcher::dispatcherThread (p=0x8214000) at tasks.h:43 #11 0xb7c3f22e in thread_proxy () from /usr/lib/libboost_thread-mt.so.1.35.0 #12 0xb78274c0 in start_thread () from /lib/i686/cmov/libpthread.so.0 #13 0xb791b6de in clone () from /lib/i686/cmov/libc.so.6 (gdb)
fonte: @otland