For complex programs the size of the debug information (especially for C++ programs) may be considerable, and it may impact your deployment time.
Hopefully you will not need the debug symbols as often. What if you could store the debug information on only one server instead of N?
Turns out you can pull this trick easily with the following bash script (which you can include in your Makefile as a post-build step):
#! /bin/bash
DBGFILE=DebugInfoServerNetworkMountedPath/$1.dbg
if objcopy --only-keep-debug $1 $DBGFILE; then
#strip -d $1 # strip debug info, or strip everything:
strip $1
objcopy --add-gnu-debuglink=$DBGFILE $1
fi
That's it.
"But how is the debugger going to know how to locate the debug information, since we stripped it out?" one may ask.
Simple. The
objcopy --add-gnu-debuglink
step creates a special section inside the ELF executable, which will point to the (network) location of the debug information. Both GDB and ZeroBUGS know how to handle it transparently.
2 comments:
The Microsoft tools have actually done a good job with this for years. The compiler has long generated the debug symbols into a separate PDB file. And WinDbg has support for Symbol Servers. I think Visual Studio does too.
George: sure, I was just pointing out a similar and lesser known feature for Linux/Unix systems.
Post a Comment