How-to:Advanced:Valgrind
Back to How-to:Advanced Guides list.
Overview
Valgrind is a programming tool/debugger.
To install:
- You can install it from your distro's repo, eg.: apt-get install valgrind in Debian/Ubuntu.
- You can compile the source code from Valgrind's site.
More info:
Tools
Valgrind has several tools/modes. The default tool is Memcheck and should be the most useful for SkyFire.
Memcheck
Memcheck is a memory error detector. Memcheck can detect a lot of things.
You should start your core by this command:
valgrind --tool=memcheck --leak-check=full --log-file=valgrind.log ./worldserver
Note that: Your core become so slow(core startup 3-5mins+) and lost a lot of performance, so don't try to use it with a lot of players.
If you do a ctrl-c your log file should contains a lot of information. Most of them are "useless", like:
==22709== Conditional jump or move depends on uninitialised value(s) ==22709== at 0x401707D: (within /lib/ld-2.10.1.so) ==22709== by 0x40052C0: (within /lib/ld-2.10.1.so) ==22709== by 0x4007FFA: (within /lib/ld-2.10.1.so) ==22709== by 0x400361C: (within /lib/ld-2.10.1.so) ==22709== by 0x40153E6: (within /lib/ld-2.10.1.so) ==22709== by 0x400138C: (within /lib/ld-2.10.1.so) ==22709== by 0x4000AF7: (within /lib/ld-2.10.1.so)
The number(22709) is the core's process id(PID). The log file has a summary part at the end of the log:
==22709== LEAK SUMMARY: ==22709== definitely lost: 1,308,624 bytes in 183,502 blocks. ==22709== indirectly lost: 2,960 bytes in 31 blocks. ==22709== possibly lost: 49,368 bytes in 1,088 blocks. ==22709== still reachable: 69,714,748 bytes in 188,424 blocks. ==22709== suppressed: 0 bytes in 0 blocks.
The "definitely lost" is a 99.9% memory leak, eg.:
==22709== 360 bytes in 1 blocks are definitely lost in loss record 1,203 of 1,396 ==22709== at 0x4C2626C: operator new(unsigned long) (vg_replace_malloc.c:230) ==22709== by 0xB65316: OutdoorPvPTF::SetupOutdoorPvP() (OutdoorPvPTF.cpp:228) ==22709== by 0xB5DBCC: OutdoorPvPMgr::InitOutdoorPvP() (OutdoorPvPMgr.cpp:79) ==22709== by 0xCF8912: World::SetInitialWorldSettings() (World.cpp:1661) ==22709== by 0x8F4606: Master::Run() (Master.cpp:234) ==22709== by 0x8F3B35: main (Main.cpp:154)
You can see a good and simple example at: http://valgrind.org/docs/manual/quick-start.html#quick-start.interpret
You can read more about Memcheck at: http://valgrind.org/docs/manual/mc-manual.html