Debuggen
Aus Invertika Wiki
Hier geht es darum wie der Mana Client bzw. Server debuggt werden kann.
Debuging mittels gdb
Bei gdb handelt es sich um den GNU Debugger mit welchem unter Linuxsystemen debuggt werden kann. Eine Debug Session könnte dann z.B. so aussehen:
gdb mana
(gdb) r
Starting program: /usr/local/bin/mana
[Thread debugging using libthread_db enabled]
[New Thread 0xb7dccb70 (LWP 2496)]
[New Thread 0xb73f6b70 (LWP 2497)]
[New Thread 0xb68c0b70 (LWP 2498)]
[Thread 0xb68c0b70 (LWP 2498) exited]
[New Thread 0xb60bfb70 (LWP 2499)]
[Thread 0xb60bfb70 (LWP 2499) exited]
[New Thread 0xb58beb70 (LWP 2500)]
[Thread 0xb58beb70 (LWP 2500) exited]
[New Thread 0xb50bdb70 (LWP 2501)]
[Thread 0xb50bdb70 (LWP 2501) exited]
Program received signal SIGSEGV, Segmentation fault.
0x00dc6dab in std::string::assign(std::string const&) () from /usr/lib/libstdc++.so.6
(gdb) bt
#0 0x00dc6dab in std::string::assign(std::string const&) () from /usr/lib/libstdc++.so.6
#1 0x00dc6e84 in std::string::operator=(std::string const&) () from /usr/lib/libstdc++.so.6
#2 0x0819b2a0 in Minimap::setMap(Map*) ()
#3 0x0824b8db in Engine::changeMap(std::string const&) ()
#4 0x0829b6a6 in ManaServ::PlayerHandler::handleMapChangeMessage(Net::MessageIn&) ()
#5 0x0829ae92 in ManaServ::PlayerHandler::handleMessage(Net::MessageIn&) ()
#6 0x08298610 in ManaServ::(anonymous namespace)::dispatchMessage(_ENetPacket*) ()
#7 0x082986bf in ManaServ::flush() ()
#8 0x08294b75 in ManaServ::GeneralHandler::flushNetwork() ()
#9 0x0824ee55 in Game::logic() ()
#10 0x0826453b in main ()
(gdb) frame 2
#2 0x0819b2a0 in Minimap::setMap(Map*) ()
(gdb) print map->getName()
$1 = (const std::string &) @0xbfffee20: {static npos = 4294967295,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x4c573c ""}}
(gdb)
Mit gdb mana wird dabei der Debugger mit dem Client gestartet. mit r (für run) führt man das entsprechende Programm aus. Kommt es währenddessen zu einem Fehler kann man sich den Call Stack mittels bt (für Backtrace) anzeigen lassen.

