接前文:

[daily] 内存越界的分析与定位

如前文提及, 使用sanitizer-address 可以有效的检查程序的内存问题。

当时在CentOS7中,虽然也可以使用,但是却遇到如下两个问题:

1.  程序崩溃时的打印信息中,缺少代码信息,虽然知道出了问题,但是却并不知道具体问题处在哪一个地方,哪一行。

2.  不能对 sanitizer-address 设置断点。从而在发生问题的时候,保留运行信息。

对比,我的archlinux,却没有这个问题。我想唯一的区别应该就是gcc的版本问题。

arch的gcc版本是7, CentOS7的gcc版本是4.8.5

所以解决这问题的思路就是安装一个高版本的gcc。

那么在 CentOS7中,安装高版本gcc,一般有两个方法:

1, 使用源码。

2. 使用SCLo

什么是SCLo,简单的说,就是比epel更丰富的软件包集合:

https://www.softwarecollections.org/en/about/

快速使用方法:

https://www.softwarecollections.org/en/docs/

yum install centos-release-scl

好了,有了SCLo库之后,我们就可以安装GCC7了。

yum install devtoolset--gcc

再装GCC7的 libasan

yum install devtoolset--libasan-devel

他们是devtoolset,和常规的软件还不太一样

devtoolset- - Developer Toolset is designed for developers working on CentOS or Red Hat Enterprise Linux platform. It provides current versions of the GNU Compiler Collection, 
GNU Debugger, and other development, debugging, and performance monitoring tools.

因为他们都是装在opt下面的,

[root@dpdk chimpanzee]# rpm -ql devtoolset--libasan-devel
/opt/rh/devtoolset-/root/usr/lib/gcc
/opt/rh/devtoolset-/root/usr/lib/gcc/x86_64-redhat-linux
/opt/rh/devtoolset-/root/usr/lib/gcc/x86_64-redhat-linux/
/opt/rh/devtoolset-/root/usr/lib/gcc/x86_64-redhat-linux//libasan.a
/opt/rh/devtoolset-/root/usr/lib/gcc/x86_64-redhat-linux//libasan.so
/opt/rh/devtoolset-/root/usr/lib/gcc/x86_64-redhat-linux//libasan_preinit.o
/opt/rh/devtoolset-/root/usr/share/doc/devtoolset--libasan-devel-7.2.
/opt/rh/devtoolset-/root/usr/share/doc/devtoolset--libasan-devel-7.2./ChangeLog.bz2
/opt/rh/devtoolset-/root/usr/share/doc/devtoolset--libasan-devel-7.2./LICENSE.TXT
[root@dpdk chimpanzee]#

配置一下,就可以用了

[root@dpdk chimpanzee]# source /opt/rh/devtoolset-/enable
[root@dpdk chimpanzee]# gcc -v
... ...
gcc version 7.2. (Red Hat 7.2.-) (GCC)

这个 enable 属于软件 devtoolset-7-runtime

[root@dpdk chimpanzee]# rpm -qf /opt/rh/devtoolset-/enable
devtoolset--runtime-7.0-.el7.sc1.x86_64

这个时候,再去使用sanitizer编译程序,之后就能够看见调试信息了,也能够成功的断到libasan的断点了。

[daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件的更多相关文章

  1. centos7中修改运行级别

    centos6 在centos6里打开vim /etc/inittab文件看到下面有一行 id:5:initdefault,因此我们可以通过修改这个文件的id后的数字来修改运行级别 如果我们想要直接切 ...

  2. 【原创】主机不能访问虚拟机CentOS7中的站点

    主机不能访问虚拟机CentOS7中的站点 ================================ 虚拟机上装好了centos7,并配好了nginx+php+mysql,但是本机就是无法访问. ...

  3. Centos7中hadoop配置

    Centos7中hadoop配置 1.下载centos7安装教程: http://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html (注意 ...

  4. CentOS7中DHCP配置

    因为需要网络引导系统的安装,所以需要安装和配置DHCP服务器.DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议,它提供了一种动态指定IP地址和配置参 ...

  5. 在centos7中限制kvm虚拟机可访问的资源

    最近通过艰苦卓绝的度娘(我很想用谷歌,可是,你懂的),终于搞明白如何在centos7中限制kvm虚拟机可访问的资源了.度娘给出的结果中,大部分都说的很对,然而,却很难照着做,主要原因有两点:1.网上的 ...

  6. Centos7中网络及设备相关配置

    centos7中,不再赞成使用ifconfig工具,取而代之的是nmcli工具,服务管理也是以systemctl工具取代了service,这些之前版本的工具虽然在centos7中还可以继续使用,只是出 ...

  7. CentOS7中使用yum安装Nginx的方法

    最近无意间发现Nginx官方提供了Yum源.因此写个文章记录下. 1.添加源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址.因此可以如下执行命令添加源: ...

  8. <亲测>CentOS7中使用yum安装Nginx的方法

    CentOS7中使用yum安装Nginx的方法   最近无意间发现Nginx官方提供了Yum源.因此写个文章记录下. 1.添加源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了 ...

  9. Centos7中ELK集群安装流程

    Centos7中ELK集群安装流程   说明:三个版本必须相同,这里安装5.1版. 一.安装Elasticsearch5.1   hostnamectl set-hostname elk vim /e ...

随机推荐

  1. pandas DataFrame.shift()函数

    pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个DataFrame ...

  2. 【转】 Windows下配置Git

    [转自]http://blog.csdn.net/exlsunshine/article/details/18939329 1.从git官网下载windows版本的git:http://git-scm ...

  3. Java知多少(26)源文件的声明规则

    当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则: 一个源文件中只能有一个public类. 一个源文件可以有多个非public类. 源文件的名称应该和pu ...

  4. swoole 定时器

    timer.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); swoole_timer_tick(, function ($timer ...

  5. [Bayes] Multinomials and Dirichlet distribution

    From: https://www.cs.cmu.edu/~scohen/psnlp-lecture6.pdf 不错的PPT,图示很好. 伯努利分布 和 多项式分布 Binomial Distribu ...

  6. [Optimization] Greedy method

    Given two sequences of letters A and B, find if B is a subsequence of A in thesense that one can del ...

  7. mysql添加字段并且设置默认值

    ALTER TABLE task ADD uploadStatus TINYINT(4) DEFAULT '0' COMMENT '上传状态';

  8. Pyhthon爬虫其之验证码识别

    背景 现在的登录系统几乎都是带验证手段的,至于验证的手段也是五花八门,当然用的最多的还是验证码.不过纯粹验证码识已经是很落后的东西了,现在比较多见的是滑动验证,滑动拼图验证(这个还能往里面加广告).点 ...

  9. mongodb 建立索引提示异常:WiredTigerIndex::insert: key too large to index, failing 1483

    { "ok" : 0.0, "errmsg" : "WiredTigerIndex::insert: key too large to index, ...

  10. numpy中数据合并,stack ,concentrate,vstack,hstack

    在python的numpy库中有一个函数np.stack(), 看过一些博文后觉得别人写的太复杂,然后自己有了一些理解之后做了一些比较简单的解释 np.stack 首先stack函数用于堆叠数组,其调 ...