Crie, gerencie e monitor seu OTServ de qualquer dispositivo e lugar do mundo!
 
Depurando seu OTServ com GNU Debugger

Depurando seu OTServ com GNU Debugger

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.

Putty – Conectando no VPS e Ligando OTServ

 

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

  1. 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“;
  2. 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;
  3. Agora basta iniciarmos o GDB pelo comando “gdb theforgottenserver core.pid“, após isso aguarde alguns segundos;
  4. 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