building a private version of gdb on a machine that has an older version.
Posted by peeterjoot on November 23, 2009
We have SLES10 linux machines, and the gdb version available on them is a old (so old that it no longer works with the version of the intel compiler that we use to build our product). Here’s a quick cheatsheet on how to download and install a newer version of gdb for private use, without having to have root privileges or replace the default version on the machine:
mkdir -p ~/tmp/gdb cd ~/tmp/gdb wget http://ftp.gnu.org/gnu/gdb/gdb-7.2.tar.bz2 bzip2 -dc gdb-7.2.tar.bz2 | tar -xf - mkdir g cd g ../gdb-7.2/configure --prefix=$HOME/gdb make make install
Executing these leaves you with a private version of gdb in ~/gdb/bin/gdb that works with newer intel compiled code.
This version of gdb has some additional features (relative to 6.8 that we have on our machines) that also look interesting:
- disassemble start,+length looks very handy (grab just the disassembly that is of interest, or when the whole thing is desired, not more hacking around with the pager depth to get it all).
- save and restore breakpoints.
- current thread number variable $_thread
- trace state variables (7.1), and fast tracepoints (will have to try that).
- detached tracing
- multiple program debugging (although I’m not sure I’d want that, especially when just one multi-threaded program can be pretty hairy to debug). I recall many times when dbx would crash AIX with follow fork. I wonder if other operating systems deal with this better?
- reverse debugging, so that you can undo changes! This is said to be target dependent. I wonder if amd64 is supported?
- catch syscalls. I’ve seen some times when the glibc dynamic loader appeared to be able to exit the process, and breaking on exit, _exit, __exit did nothing. I wonder if the exit syscall would catch such an issue.
- find. Search memory for a sequence of bytes.