应用程序调试(二)————使用GDB来调试应用程序

gdb下载地址:http://ftp.gnu.org/gnu/gdb/
交叉编译工具:arm-linux-gcc-3.4.1

一、编译gdb,gdbserver

第一步:编译gdb

    1、解压
    tar xjf gdb-7.4.tar.bz2
    cd gdb-7.4/
    2、配置:
    ./configure --target=arm-linux
    3、编译
    make

这一步出现问题

/root/tools/gdb-6.6/bfd/elf32-arm.c: In function ‘find_thumb_glue’:
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function ‘find_arm_glue’:
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result

由于返回值没有被接收导致编译终端,编译规则太严了,可修改编译规则
“-Werror” will make all warnings into errors. That means you cannot get you program compiled with even warnings.
修改bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
改为:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes

再次make,出现类似的错误,在修改
4、安装到$PWD/tmp

mkdir tmp
    make install prefix=$PWD/tmp

5、把arm-linux-gdb复制到/bin目录

    sudo cp arm-linux-gdb /bin/
    sudo chmod +x /bin/arm-linux-gdb

第二步:编译gdbserver
cd gdb/gdbserver/
./configure –host=arm-linux
make
cp gdbserver /work/nfs_root/first_fs/bin

第三步:在PC编译要调试的应用,编译时加上-g选项
arm-linux-gcc -g -o dma_test dma_test.c
第四步:调试

  1. 在ARM板上
    gdbserver 10.66.114.17:1234 ./dma_test dma

  2. 在PC上
    /bin/arm-linux-gdb ./dma_test dma
    输入:target remote 10.66.114.17:1234
    然后: 使用gdb命令来控制程序

    另一种方法:
    让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件
    然后使用gdb根据core dump文件找到发生错误的地方
    在ARM板上:

    1. ulimit -c unlimited
    2. 执行应用程序 : 程序出错时会在当前目录下生成名为core的文件

    在PC上:
    /bin/arm-linux-gdb ./test_debug ./core

    backtrace(bt)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值