dmalloc arm-linux平台使用

摘要:
如果valgrind工具是i368linux上的首选,但在armlinux平台上,dmalloc是一个不错的选择。此时,您可以看到交叉编译工具gcc2.3 makethreadscxx makeinstall和哪个gcc命令。这样,就编译了支持线程和c++的dmalloc版本。

话说“工欲善其事,必先得其器”,用C语言写程序,最怕遇到个什么内存泄漏,内存越界访问了,心里那个急啊。。。

如果在i368-linlux上,valgrind工具是首选,但在arm-linux平台上,如何呢,dmalloc就是一个不错的选择。当然,IBM的purify是另外一个级别的选手,不提也罢。

1. 到官方网站下载dmalloc: www.dmalloc.com

2. 交叉编译dmalloc

2.1 configure

因为configure过程中要在PC上执行test程序,而交叉编译的test程序在PC上无法运行,导致configure通不过,因此,我没有加上--host=arm-linux选项

./configure --prefix=/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/arm-linux/ --enable-cxx --enable-threads

其中opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/arm-linux/是我的交叉编译环境的目录

2.2

修改环境变量,偷梁换柱

export PATH=/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/arm-linux/bin/:$PATH

其中交叉编译工具在/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/arm-linux/bin/下,且名字为gcc, g++等。

这时,用which gcc命令看到的将是交叉编译工具gcc

2.3

make threadscxx

make install

 这样,就编译出了支持线程和c++的dmalloc版本。

3. 环境配置

将交叉编译后的dmalloc放入嵌入式板子上,执行./dmalloc -b -l logfile -i 100 low

会看到有两行输出:

DMALLOC_OPTIONS=debug=0x4e48503,inter=100,log=logfile

export DMALLOC_OPTIONS

把这两行作为shell脚本执行一下,即是设置环境变量

4. 写代码测试dmalloc啦

简单的程序:

#include <signal.h>
#include <unistd.h>
#include <cstdlib>
 
int main()
{
 
    char *p = (char *)malloc(10);
 
    for(int i = 0; i < 11; ++i)
        p[i] = 'a';
 
    return 0;
}

上面的程序有明显的内存越界访问。

用如下命令编译之:

$ arm-linux-g++ try.cpp -DDMALLOC_FUNC_CHECK -ldmalloc

生成a.out

在板子上执行./a.out

会有logfile产生,内容如下:

948436802: 1: Dmalloc version '5.5.2' from 'http://dmalloc.com/'
948436802: 1: flags = 0x4e48503, logfile 'logfile'
948436802: 1: interval = 100, addr = 0, seen # = 0, limit = 0
948436802: 1: starting time = 948436802
948436802: 1: process pid = 5091
948436802: 1:   error details: checking user pointer
948436802: 1:   pointer '0x40016fe8' from 'unknown' prev access 'try.cpp:11'
948436802: 1:   dump of proper fence-top bytes: 'i336312372'
948436802: 1:   dump of '0x40016fe8'-6: '300300

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇selenium+python自动化90-unittest多线程执行用例.git目录文件过大下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kvm安装步骤

一、虚拟化VT开启确认 1、首先确认处理器有VT功能 grep vmx /proc/cpuinfo #(INTEL厂商 芯片 ) grep svm /proc/cpuinfo #(AMD厂商 芯片 ) cat /proc/cpuinfo | grep -e vmx -e nx -e svm 输出的信息中有vmx或者svm就说明CPU支持VT虚拟化。 没有的...

Linux_搭建Samba服务(匿名访问)

【RHEL8】—SMBserver;【RHEL7】—SMBclient !!!测试环境我们首关闭防火墙和selinux(SMBserver和SMBclient都需要) [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [r...

Linux下杀掉所有得java进程

--转自https://blog.csdn.net/oppo62258801/article/details/81434038 1.Linux查看所有Java进程 ps -ef | grep java | grep -v grep  (是在列出的进程中去除含有关键字"grep"的进程) 2. 使用awk分割结果,获取PID awk '{print $2}'...

linux的基本操作(mysql 的基本操作)

Mysql 的基本操作 在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,还需要会一些基本的相关操作。当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付日常的管理工作了,至于更高深的那是DBA(专门管理数据库的技术人员)的事情了。 【更改mysql数据库root的密码】 首次进入数据库是...

Linux常用命令汇总

1. 查看Linux操作系统信息: uname -a cat /proc/version lsb_release -a    2. 设置ls显示的文件夹的颜色(将下面这条目录加在 .bashrc 文件最后): LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS (All possibl...

linux mce的一些相关内容和用户态监控的设计方法

之所以想起写一点关于mce的东西,倒不是因为遇到mce的异常了,之前遇到过很多mce的异常,内存居多,但没有好好记录下来,写这个是因为参加2018 clk南京会议的一点想法。 void __init trap_init(void) { 。。。 #ifdef CONFIG_X86_MCE set_intr_gate_ist(X86_TRAP_MC,...