Debugging Information in Separate Files
GDB支持将程序调试信息放在独立的文件里,与可执行程序分离,其可以自动查找和自动加载调试信息。
由于调试信息比较大,甚至比可执行程序还要大,通常将可执行程序的调试信息以单独文件的形式发布,需要调试时可以再安装这些文件。
GDB支持两种设置单独调试信息文件的方式:
第一种,可执行程序含调试链接,该链接指定单独的调试信息文件名。单独调试文件名通常是executable.debug,executable是相应的可执行程序名,
不带路径(比如:ls.debug是/usr/bin/ls的调试信息文件)。
此外,调试链接为调试文件设置了CRC32的校验和,GDB用此校验和来确保可执行文件和调试文件是同一个版本的。
第二种,可执行文件含版本ID号和唯一的bit串,而相应的调试信息文件也包含该bit串。该方式只在某些系统上支持,特别是那些在二进制文件里使用ELF格式和GNU Binutils的系统。更多关于此功能的细节,可以参见–build-id命令行选项的介绍,在GNU连接器“命令行选项”节中。
虽然版本ID号没有直接指出调试信息文件名,但是可以从版本ID号里计算出来,参见下面。
#0 0x0000003959230265 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x0000003959231d10 in abort () at abort.c:88
#2 0x000000395d6bec44 in __gnu_cxx::__verbose_terminate_handler () at ../../../../libstdc++-v3/libsupc++/vterminate.cc:97
#3 0x000000395d6bcdb6 in __cxxabiv1::__terminate (handler=<value optimized out>) at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:4#4 0x000000395d6bcde3 instd::terminate () at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:53
#5 0x000000395d6bd2ef in __cxa_pure_virtual () at ../../../../libstdc++-v3/libsupc++/pure.cc:55
#6 0x00002b8729bfc933 in arpc::ClientPacketHandler::handlePacket (this=0x2aac6df6ee38, packet=0x2aac6df6fc30, args=<value optimized out>) at build/release64/arpc/ClientPacketHandler.cpp:35
#7 0x00002b872a0ddcd8 in anet::Connection::handlePacket () from /home/admin/sap/lib/libanet.so.3
#8 0x00002b872a0e75fb in anet::TCPConnection::readData () from /home/admin/sap/lib/libanet.so.3
#9 0x00002b872a0e624b in anet::TCPComponent::handleReadEvent () from /home/admin/sap/lib/libanet.so.3
#10 0x00002b872a0e8c0b in anet::Transport::eventIteration () from /home/admin/sap/lib/libanet.so.3
#11 0x00002b872a0e8cf2 in anet::Transport::eventLoop () from /home/admin/sap/lib/libanet.so.3
#12 0x00002b872a0e8d47 in anet::Transport::run () from /home/admin/sap/lib/libanet.so.3
#13 0x00002b872a0ea02d in anet::Thread::hook () from /home/admin/sap/lib/libanet.so.3
#14 0x0000003959e064a7 in start_thread (arg=<value optimized out>) at pthread_create.c:297
#15 0x00000039592d3c2d in clone () from /lib64/libc.so.6