gdb源码在linux哪个目录,编译GDB(主要针对LINUX平台)

1. 取得源码

通常人们选择release的版本,可以直接到http://www.gnu.org/software/gdb/download/,这里介绍了各种下载地址,建议下载最新版本。

当然我个人更推荐使用trunk,BUG这里最早修复,新功能这里最早会有,只是很偶尔会有编译出错的情况(今年我好像还没碰见过),大约过个1天也会有人修复。唯一的缺点是你需要经常更新你的GDB代码并编译安装他们,当然这其实也花不了多少时间。

取得trunk也可以通过下载的方式,ftp://sourceware.org/pub/gdb/snapshots/current/gdb.tar.bz2就是当前GDB的源码。

当然如果经常更新的话,每次都下载十几M的源码包肯定比较麻烦,这时候最好就能用到版本控制工具来取得代码。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

就可以更新源码。

2.基本编译

编译之前请安装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选项。

3.编译支持其他体系结构的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命令打开这个文件,就可以了。

4.交叉编译

如果想在本地编译一个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。

5.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,

这样开发者可以更快的修复问题。

6.写在最后

前面介绍过的config参数可以同时使用,大家可根据需要灵活组合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值