Debugging Metamod:Source on Linux
Introduction
To debug your SourceMM plugin on Linux, you should have gdb (Gnu DeBugger) and g++ 3.4.
Steps
- Compile your plugin with -O0 -g -ggdb3. This will ensure your plugin has debug symbols compiled in. You should not be using high optimization flags or stripping symbols (-s).
- In your shell (for bash), type:
export LD_LIBRARY_PATH=".:bin:$LD_LIBRARY_PATH"
- In your directory that contains srcds_run, type:
gdb srcds_i686
- Note: this assumes that your processor is i686. There is also srcds_amd and srcds_i486 -- run the one that is best described by your CPU.
- In GDB, type your startup command line prepended by "run", like so:
run -game cstrike +map de_dust +ip 127.0.0.1 +maxplayers 16
- Once your server crashes, you can use bt to see a backtrace. To jump to a particular frame of the backtrace, you can use frame <n>.
Notes
- To break into the debugger, use CTRL+C.
- To continue after breaking, use cont.
- To print an expression, use print <expr>. You can print address contents, C expressions, previous expression results, and variable contents if the names are available in the frame.
- For disassembling..
- Use set disas intel for proper Intel assembly output.
- Use display/i $pc to see the current eip and its disassembly.
- Use disas <addr|expr> to disassemble an address or expression.
- Use info all to see the CPU register layout.
- Use step and next for stepping into and over lines of code (also s and n).
- Use stepi and nexti for stepping into and over individual instructions (also si and ni.