实现 ELF 可执行文件和调试符号表分离 =================================== .. versionadded:: @2010-07-08 创建 记得好久以前看到 RedHat 的 rpm 都有个 debuginfo 的对应rpm,也就是可执行文件没有 调试符号表,但安装 debuginfo 的 rpm 后可以看到调试信息。 当时没搞明白是怎么做的,后来就不了了之了。 前不久在 Gentoo 里看到 FEATURES 里加个 splitdebug 可以实现同样的效果, 正好我们可能有类似的需求,于是研究了一下,其实很简单的几个命令: :: $ gcc -g test.c -o test $ objcopy --only-keep-debug test test.debug $ objcopy --add-gnu-debuglink=test.debug test $ stip -s test $ gdb ./test ... Reading symbols from /home/liuzx/test...Reading symbols from /home/liuzx/test.debug...done. (no debugging symbols found)...done. (gdb) list 1 #include 2 3 int main() 4 { 5 printf("Hello.\n"); 6 7 return 0; 8 } (gdb) q $ file test test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped