ARM-linux下GDB的移植_第1页
ARM-linux下GDB的移植_第2页
ARM-linux下GDB的移植_第3页
ARM-linux下GDB的移植_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM-linux 下GDB的移植arm-linux的gdb移植分为两种情况.一种是交义调试版。这一种模式是需要编译一个 arm-linux版本gdbserver (GDB的stub模块).然后 再编译一个X86版本交义调试的gdb.为了与桌面版本身的gdb区别开来,一般 改名为arm-linux-gdbo两者通过申口或者网络进行互联。还有一种是干脆把整个gdb移植成一个ARM的本地版。在开发板上直接用 gdb来调试。前一种方法是比较正统的方法。它gdbserver可以通过arm-linux-gdb直接在host上单步调试target的应用程序。.并且可以与图形界面调试器配合进行图形界 面调试

2、。缺点就是target资源较少。因此单步调试的速度并不是太快。因此实用 性不算太强。如何交义调试arm-linux的本地版一般只能做字符界面的。界面没有支持GUI的交义调试版 友好。而且单步调试速度也不算快。但是有几大大优点:1. 定位程序退出所在函数.2. 判断程序退出的原因3. 通过条件断点分析异常情况时运行环境.用本地版gdb运行程序时,当程序因段错误或其它原因退出程序时。可以通 过gdb bt(即backtrace)来查看最后运行的堆栈。来判断出错时是在哪一个函数里 退出。这样会大大加快定位错误的速度,这样有时需要几天的定位的错误,可能只需要几分钟即可定位,这在嵌入式开发里有很强实际效

3、用。因此在这里我们把两种版本的gdb都移植一下。1.本地版本的gdb的移梢ARM本地版需要ncurse的支持。这里移植是 gdb 6.8.编译器是 arm-linux-gcc 4.3.3 .操作系统是arm-linux 2.30.4ncurse 5.6。按照移植规范,ncurse放入libs目录,gdb解压在项目目录下/home/hxy/gdb (项目目录)|+-output| |_arm-linux|- gdb 6.8|-|-libs|- ncurse1.1 ncurse库的移植 解压 tar xvzf ncurses-5.6.tar.gzcd ncurses-5.6 生成 makefile

4、o ./configure -host=arm-linux -prefix="$PWD/././output/arm-linux” -without-ada -enable-termcap -with-sharedo其中-enable-termcap比较关键gdb需要这个库 编译make 安装 make installo libncurses.so 库应该在 /home/hxy/gdb/output/arm-linux/lib1.2 gdb本身的移植。 解压 tar xvjf gdb-6.8.tar.bz2 o cd gdb-6.8生成 Makefileo ./configure -

5、host=arm-linux -enable-shared -prefix="$PWD/./output/arm-linux" -without-x -disable-gdbtk -disable-tui -without-included-regex -without-included-gettext LDFLAGS="-L$PWD/./output/arm-linux/lib” CPPFLAGS="-I$PWD/./output/arm-linux/include”脚本含义下:o -enable-shared 动态编译 o-host=arm-linu

6、x 用 arm-linux-gcc 编译o-prefix="$PWD/./output/arm-linux”安装目录o-without-x 取辛肖 x windows 支持o -disable-gdbtk取消gdbtk,应该也是图形界面相关的 o-disable-tui 取消 tui 界面o-without-included-regex 关闭正贝U表达式库o-without-included-gettext 去掉用丁多语言处理的gettext 库正则表达式/gettext,暂时不需要,先去掉o CPPFLAGS/LDFLAGS 是确保能找到 ARM 版的 ncurses 库编译mak

7、eo如果gdb 6.7有一个警告会当成 bug处理symtab.c: In function 'find_line_symtab':symtab.c:2252: error: 'exact' may be used uninitialized in this function。只要简单把int exact;变成int exact =0 ;即可编译通过安装 make installo 最终的arm的程序gdb应该在home/hxy/gdb/output/arm-linux/bin 下面,彳务其拷贝和 libncurses.so拷贝到开发板上即可运行,象 x86的G

8、DB 一样运行即可o注意这个样编译能 同时把ARM版gdbserver也同时编译出来并在安装目录看到.而且一般eabi的gcc编译器都自带了 arm-linux-gdb.所以交义版本的gdb移植很多时候可以省略.o刚刚编译出来的gdb尺寸相当大,10M多,因此必须要用arm-linux-strip gdb来把尺寸减少.strip后大约2M多.2.交叉版本的gdb移棺交义版本中,arm-linux-gcc 3.3.2只能成功编译gdb 5.2.1.gdb 6.x需要更gcc 3.4.4以上版本。eabi arm-linux-gcc 4.3.3 编译可以成功编译 gdb 6.8.因为交义版等丁要移

9、植两个平台程序.(x86的arm-linux-gdb和arm版的gdb server)这里目录结构调整如下/home/hxy/gdbI+-output| |_arm-linux| |_x86-linux|- gdb 6.8| |- cross-gdb # 保存 x86 gdb| |- -gdb/gdbserver # 原有目录,在此编译 arm gdbserver|-libs|- ncurse因其中cross-gdb是手工创建为了存放x86的目标代码2。1编译cross调试的gdb 6.8* 在/home/hxy/gdb/gdb-6.8 清除上一次结果 make distclean 创建 /h

10、ome/hxy/gdb/gdb-6.8/cross-gdb.在上述目录生成 Makefile./configure -target=arm-linux -enable-shared -prefix=$PWD/././output/x86-linux -without-x -disable-gdbtk -without-included-regex -without-include-gettext其中大部分参数跟本地版 gdb含意类似。但是-target=arm-linux表示target 是arm-linux版的。而且是安装在 X86-linux下 编译make安装 make installo

11、应该是安装在 /home/hxy/gdb/output/x86-linux/bin/,名字是 arm-linux-gdb,2.2 生成 arm 版 gdbserver 生成 Makefile 在/home/hxy/gdb/gdb-6.8/gdb/gdbserve歆行如下 脚本o ./configure -host=arm-linux -prefix=$PWD/./././output/arm-linux -without-include-regex -without-included-gettext 编译make安装 make installo这里应该在 /home/hxy/gdb/outpu

12、t/arm-linux/bin 有gdbserver,至丁如何使用交义调试参见相关博文,附件是已经编译好直接在eabi库 环境下使用的版本3.测试ARM本机调试我们用一个有段错误的源码来测试本地调试的性能 ,参见如下代码,这里在f2()产生段错误/* Andrew Huang <bluedrum>*/#include <stdio . h>#include <string . h>void f2 (char * str )(char buf 1024;strcpy (buf,( const char *) str );void f1 ()(int x = 0

13、 ;f2 ( char *) x);void test1 ()(f1 ();int main ()(test1 ();编译 arm-linux-gcc test.c -o test -g在NFS路径上测试它的调用gdb和test.速度相当快。以下是它的测试结果rootEmbedSky bin# ./run.shGNU gdb 6.8Copyright (C) 2008 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later </licenses/gpl.html>Th

14、is is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Type "show copying"and "show warranty" for details.This GDB was configured as "arm-linux".(gdb) rStarting program: /mnt/nfs/gdb/output/arm-linux/bin/testProgram received signal SIGSEGV, Segmentation fault.0x4009852c in strcpy () from /lib/libc.so.6(gdb) bt#00x4009852c in strcpy ()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论