zoukankan      html  css  js  c++  java
  • Linux下可执行程序调试信息的分离及release程序的调试

      前两天在群里看到在讨论如何把debug版中的符号表加到release版本中,觉得这个非常有用,所以学习一下。
    使用的工具是objcopy。
    如果要生成单独的调试信息文件,命令如下:
    objcopy –only -keep -debug foo foo.dbg
    如果要去除调试信息(还可以使用strip命令),命令如下:
    objcopy --only -keep -debug foo foo.dbg
    如果要添加调试信息文件链接,命令如下:
    objcopy --add -gnu -debuglink =foo.dbg foo
    确认调试信息文件链接,命令如下:
    objdump -s -j .gnu_debuglink foo
     
    调试release程序前首先需要从debug版本中获取符号表信息,这个是通过objcopy这个利器,命令如下:
    objcopy --only -keep -debug debug info.dbg
    其中debug是带有符号表的可执行程序,info.dbg是保存符号表的文件。
    在使用gdb调试release程序的时候,使用--symbol命令来加载前面生成的符号表,命令如下:
    [root@CentOS_192 debug] #gdb -q --symbol=info.dbg --exec=release
    Reading symbols from /root /debug /info.dbg... done.
    (gdb) start
    Temporary breakpoint 1 at 0x4004ef : file test.c, line 11.
    Starting program : /root /debug /release
    Temporary breakpoint 1, main () at test.c : 11
    11 return func();
    Missing separate debuginfos, use : debuginfo -install glibc - 2. 12 - 1. 80.el6.x86_64
    (gdb)
    其中--exec选项指定的release就是release版本的程序,这个程序原本是没有符号表信息的。
  • 相关阅读:
    HDU 1394 Minimum Inversion Number
    LA 3938 动态最大连续和(线段树)
    HDU 1754 I Hate It(线段树)
    HDU 1166 敌兵布阵(线段树 or 二叉索引树)
    《乞力马扎罗的雪》读书笔记
    LA 3266 田忌赛马
    UVa 11235 频繁出现的数值
    《月亮与六便士》读书笔记
    LA 3135 阿格斯(优先队列)
    LA 3027 合作网络
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3317957.html
Copyright © 2011-2022 走看看