you just strip the debug symbols out (and put them somewhere safe). then write a .gnu_debuglink section to the stripped ELF binary with a CRC that matches the stripped symbols.
once something bad happens: you just take the core dump, the symbols you have tucked away, and you are able to debug just fine.
Then you can open the core file as usual: gdb executable core (just be sure to have debug files in the same directory)
http://code.google.com/p/google-breakpad/wiki/LinuxStarterGu...
99.9% of the time we don't need to, but in that 0.1% it makes a big difference.
A related issue which is more about the compiler than the operating system is that PDBs with Visual C++ on Windows are much more useful with highly optimized binaries than symbols (either embedded or separate) are with GCC-optimized binaries. This is understandable when you consider the different development cultures, but that doesn't make it any less of a problem for us. :)