Hoje ensinaremos como depurar seu OTserv com GNU Debugger, mais conhecido como GDB. A utilizaão dessa ferramenta permite que façamos com que o nosso executável ao fechar inesperadamente gere um log da excessão que gerou o erro.

Para utilizar o GNU Debugger é necessário conectar-se ao SSH via Putty, caso não saiba como fazer temos um tutorial aqui.

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 – Utilizando

Para inicializar o GDB, digite:

gdb theforgottenserver core.pid

Após alguns segundos digite:

bt

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.

Avatar

admin

Deixe seu comentário