编译GDB(主要针对LINUX平台)

  • 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/hellogcc-logs/89007460.html

    teawater@hellogcc
    
     
       
    一. 取得源码
    1.release的版本,可以直接到http://www.gnu.org/software/gdb/download/,这里介绍了各种下载地址,建议下载最新版本。
    2.通过ftp下载的方式,ftp://sourceware.org/pub/gdb/snapshots/current/gdb.tar.bz2就是当前GDB的源码。
    3.版本控制工具来取得代码。GDB官方的版本控制使用的CVS,你可以用:
    cvs -z9 -d :pserver:anoncvs@sourceware.org:/cvs/src co gdb
    取得最新的GDB代码,而在取得源码用目录中用:
    cvs update
    就可以更新源码。
    GDB也提供了GIT镜像:
    git clone git://sourceware.org/git/gdb.git
    取得最新的GDB代码,而在取得源码用目录中用:
    git pull
    就可以更新源码。
    
    
    二.基本编译
    编译之前请安装texinfo,libncurses5-dev, m4, flex 和 bison这5个包。
    最基本的GDB编译非常简单,和编译大部分软件一样。
    创建一个用来编译GDB的目录:
    mkdir bgdb
    进入这个目录:
    cd bgdb
    config,其中../gdb/是GDB源码的目录:
    ../gdb/configure
    然后就是编译:
    make
    编译后安装:
    make install
    其中比较关键的地方就是config,其决定了后面编译出什么样的GDB。
    
    如果想设置编译好的GDB到一个指定目录,可以用:
    ../gdb/configure  --prefix=$HOME
    使用这个configure,可以让GDB安装到当前用户的home目录。
    
    也可以在编译的时候指定CFLAGS,可以用:
    ../gdb/configure CFLAGS=-g
    使用这个configure,编译出的GDB没有打开O2选项。
    
    
    三.编译支持其他体系结构的GDB
    前面介绍的config方式都是编译当前体系结构的,有时候我们需要在本机(X86)上跑一个支持别的体系结构的GDB,这样可以分析那个平台的二进制文件,CORE文件以及对那个平台的的程序进行远程调试。可以这样用:
    ../gdb/configure --target=amd64-linux
    这样编译出的GDB就可以支持AMD64的GDB,编译安装的时候,GDB的执行文件会被命名为amd64-linux-gdb。
    
    但是这样编译会有个小问题,如果需要使用多个体系结构的GDB,则需要每个平台都编译一个GDB,这有点麻烦,所以我比较喜欢使用的是另一种方法配置:
    ../gdb/configure --enable-targets=all --enable-64-bit-bfd
    这样的GDB可以直接支持了全部他可以支持的体系结构和文件结构。
    其中--enable-targets=all是让GDB打开对所有体系结构支持。
    而--enable-64-bit-bfd是设置bfd为64位模式,这样才能支持64位的二进制文件比如说amd64,不过比较新的bfd中,当设置的target是64位或者打开--enable-targets=all的时候,不需要设置会自动打开这个选项,不过保险起见还是打开。
    这样编译出的GDB就能支持GDB支持的全部体系结构了。
    当然用起来有个问题就是,因为支持的体系结构太多,可能有一些二进制文件会同时符合若干种格式,打开这类文件的时候GDB会显示:
    "xxx": not in executable format: File format is ambiguous.
    Matching formats: elf32-bigmips elf32-bigmips-vxworks elf32-tradbigmips.
    Use "set gnutarget format-name" to specify the format.
    这时你就可以根据提示,用set gnutarget format-name从列表中选择正确的格式,然后再用file命令打开这个文件,就可以了。
    
    
    四.交叉编译
    如果想在本地编译一个GDB而要在其他体系结构的平台上下使用,首先需要本地交叉编译环境可用,可以编译出可以在目标平台上运行的可执行文件,然后:
    ../src/configure --host=mips64-linux --enable-64-bit-bfd
    CC=mips64-linux-gcc LD=mips64-linux-ld AR=mips64-linux-ar
    这样GDB就能编译出一个可以在mips64-linux上使用的GDB。
    
    
    五.cvs update -d
    前面提过更新CVS目录,要使用cvs update,而cvs update
    -d是不建议使用的命令,因为当增加-d选项的时候,cvs会把源码仓库中所有文件都取回来,完成后src目录中不光有原来的目录,还增加了binutils,tk,
    ld 等一大堆其他软件的目录。
    如果你希望同时使用sourceware里面这些软件的最新版本,你可以使用这个源码树,如果你不想使用这样的源码树,则请直接看下一节。
    我对这个目录建议的配置是:
    ../gdb/configure --disable-sid --disable-rda --disable-gdbtk
    --enable-targets=all --enable-64-bit-bfd
    其中--enable-targets=all --enable-64-bit-bfd上一节已经介绍过,不再介绍。
    --disable-sid --disable-rda禁止了2个不太常用且编译比较慢的软件。
    --disable-gdbtk禁止了GDB图形扩展insight的编译,其实这个软件还是相当好用的,
    这个图形扩展可以同时打开命令行,看源码的时候还能随时切换成汇编。但其有一个问题
    是跟GDB源码的联系其实非常紧密,一旦GDB一些源码作了更新,其的编译就会受到影响,
    再加上维护者不多,所以一旦编译不过就需要等上几天,这种情况一年能碰上几次,几率也
    不算很高。当然如果不介意的话,可以在config的时候去掉--disable-gdbtk,
    并安装包libx11-dev,编译如果发现问题可以报到邮件列表insight@sourceware.org
    这样开发者可以更快的修复问题。
    
    
    六.写在最后
    前面介绍过的config参数可以同时使用,大家可根据需要灵活组合。
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值