linux内存检查工具交叉编译

前段时间,arm下业务软件莫名其妙的挂死,然而挂死时间和时机均属于不确定因素,测试发现挂死几率并不高,有时一天两天都不会出现,有时半小时、一小时就挂死,晕死,经过排查和现象推断极有可能是内存访问或操作异常导致,好吧,查代码并无明显异常访问、操作迹象,如何是好???唉,只能求助于第三方内存查看软件喽!!

1.Valgrind,我的第一选择

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具,想必大家不陌生吧!我们先看下交叉编译过程:
A、官网下载valgrind,下载网址:http://valgrind.org/downloads/current.html#current
B、解压并进入解压目录,修改configure:"armv7*)" ---->"armv7*|arm*)"
C、执行./configure --host=arm-linux  --prefix=/usr/arm
_valgrind --program-prefix=arm-linux,
注释:--host指示指定软件运行的系统平台,一般要与交叉编译器程序的前缀。

    --program-prefix=PREFIX 指定将被加到所安装程序的名字上的前缀。
D、执行make,报错为:bad value(cortex-a8) for -mcpu=switch,我的arm版本cortex-a8 ,说明valgrind不支持该arm版本,查过资料valgrind好像不支持arm7以上,暂不知啥原因。
结果表明valgrind不适用当前编译环境-----cortex-a8

2.gdb+gdbServer远程调试环境搭建
AGDB的源代码包下载 http://www.gnu.org/software/gdb/download/ 下载
B、编译gdb,gdb运行在host主机上,一般是pc机端,解压并进入解压目录,执行./configure --target=arm-linux  --prefix=/usr/arm_gdb --program-prefix=arm-linux,
注释:--target配置gdb的目标平台,--prefix配置安装路径gdb/gdbservergdbserver目录下生成gdbserver可执行文件,更改其属性,使用任何人都可以读写执行。C、make
D、make install
E、编译gdbServer,使用交叉编译器,该软件运行于arm目标板端。
执行cd gdb/gdbserver

执行配置

./configure --target=arm-linux --host=arm-linux

编译

make CC=arm-linux-gcc  //指定交叉编译器,最好使用绝对路径,否则需设置环境变量
编译通过,gdbserver目录下生成gdbserver可执行文件,更改其属性,使用任何人都可以执行,并将其拷贝至目标机/mnt/flash。
F、调试使用。目标板ip:192.168.1.105,host ip:192.168.1.100。
在目标板上执行命令: /mnt/flash/gdbserver  192.168.1.100:5566  调试程序名称
host端运行:arm-linux-gdb   调试程序名称   
然后输入gdb命令:target remote 192.168.1.105:5566即可看到相应提示信息。

注意:调试程序名称要保持一致,即目标板和host端都在调试程序所在目录下执行相应命令。

哦,最后告诉大家,arm下业务软件莫名其妙的挂死原因并非内存访问、操作异常导致,最终查明是线程同步过程中导致异常。最终拨开乌云见日明啊!!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值