ubuntu 13.04 编译 安装 升级 gcc 4.9.0 address sanitizer

@前记:

最近查一个线上项目的crash,review代码无果,crash几率低,不可在本地环境重现。之后在线上好几个服务器跑valgrind就不crash了。个人猜测可能是跑valgrind后性能下降的比较严重,导致crash那个点触发不到了。

gcc从4.8开始支持address sanitizer,也比较好用,文章最后会简单分析下用法。

另我的环境是ubuntu13.04+gcc4.7.3,目标是升级到4.9.0。

@编译gcc4.9.0

$cd /tmp
$wget ftp://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz
$tar zxvf gcc-4.9.0.tar.gz
$cd gcc-4.9.0
$./contrib/download_prerequisites
$cd ..
$mkdir gcc-build-4.9.0
$cd gcc-build-4.9.0
$../gcc-4.9.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
$make -j4
$make install
$gcc -v

补充:我这边编译出来的lib都在路径/usr/local/lib64

@用法

#include <stdio.h>

int main()
{
    int *p = new int;
    delete p;
    *p = 10;
    return 0;
}  

这是个访问野指针的程序,但是用gcc编译(不管加不加-g)后运行却不会coredump。有了address sanitize,我们可以这样

$g++ test.cc -fsanitize=address -g$export LD_LIBRARY_PATH=/usr/local/lib64/$./a.out

我摘一部分运行信息贴出来

==25380==ERROR: AddressSanitizer: heap-use-after-free on address 0x60200000eff0 at pc 0x4007d1 bp 0x7ffffbe70890 sp 0x7ffffbe70888
WRITE of size 4 at 0x60200000eff0 thread T0
    #0 0x4007d0 in main /home/parallels/sss/cc/test/test.cc:7
    #1 0x7f6454635ea4 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21ea4)
    #2 0x4006a8 (/home/parallels/sss/cc/test/a.out+0x4006a8)

0x60200000eff0 is located 0 bytes inside of 4-byte region [0x60200000eff0,0x60200000eff4)
freed by thread T0 here:
    #0 0x7f645525a3e7 in operator delete(void*) ../../../../gcc-4.9.0/libsanitizer/asan/asan_new_delete.cc:81
    #1 0x400799 in main /home/parallels/sss/cc/test/test.cc:6
    #2 0x7f6454635ea4 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21ea4)

previously allocated by thread T0 here:
    #0 0x7f6455259f6f in operator new(unsigned long) ../../../../gcc-4.9.0/libsanitizer/asan/asan_new_delete.cc:50
    #1 0x400789 in main /home/parallels/sss/cc/test/test.cc:5
    #2 0x7f6454635ea4 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21ea4)

这信息够清楚了吧。

@后记

我暂时还没有测它对性能的影响,希望上线后能帮助定位到bug。

ubuntu 13.04 编译 安装 升级 gcc 4.9.0 address sanitizer

时间: 2024-08-10 04:50:50

ubuntu 13.04 编译 安装 升级 gcc 4.9.0 address sanitizer的相关文章

ubuntu 13.04编译安装xen4.4总结

之前在ubuntu14.04上安装xen4.4失败,提示编译有问题,这次换了成了ubuntu13.04进行安装,成功完成xen4.4的安装 1. 安装环境 操作系统:ubuntu13.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. sudo apt-get install gcc make binutils zlib1g-dev python-dev sudo apt-get install libncurs

ubuntu 14.04编译安装xen4.4总结

1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. suso apt-get install gcc make binutils zlib1g-dev python-dev sudo apt-get install libncurses5-dev libcurl4-openssl-dev libx11-dev sudo apt-get install uuid-dev

ubuntu 13.04编译pidgin-lwqq

首先安装一些编译所需的库,和工具 sudo apt-get install cmake libglib2.0-dev libpurple-dev libmozjs185-dev libcurl-ocaml-dev libsqlite3-dev 然后到作者的git下载代码 git clone [email protected]:xiehuc/pidgin-lwqq.git 下载完了开始编译安装 git submodule init git submodule update mkdir build;

Linux/RedHat 编译安装GNU gcc 4.9.0 (g++)

这里说的是编译安装,yum/apt-get 等安装方法比较简单,不阐述! 1.下载源码包:gcc.gnu.org 2.解压: tar -xjvf gcc-4.9.0.tar.bz2 3.下载编译所需的依赖包: 最简单的方法,直接执行: ./contrib/download_prerequisites 脚本自动下载依赖包 gmp, mpfr,mpc. 也可以手动下载然后移到/gcc-4.9.0目录下面自动一起安装,或者自行先编译安装 4.执行configure命令,产生makefile: mkdi

ubuntu 13.04 server安装Oracle XE 11G R2

一. 安装ubuntu 13.04 server 64位版本(最简安装即可),然后安装以下全部附件 #apt-get update #apt-get dist-upgrade#apt-get install automake autotools-dev binutils bzip2 doxygen elfutils expat gawk unzip#apt-get install gcc gcc-multilib g++-multilib ia32-libs ksh less lesstif2

ubuntu 13.10 编译安装conkeror

conkeror几年前我用过,还是一个不错的浏览器,这次因为笔记本只支持Ubuntu 13.10, 而不支持更新版本,就尝试着在Ubuntu 13.10上安装最新conkeror,但是没想到居然没有安装源.于是就编译吧, 当然还是要首先clone到源代码: git clone git://repo.or.cz/conkeror.git 然后根据官方文档的提示: To build your own Conkeror package, install fakeroot, quilt, and deb

Ubuntu 14.04 编译安装 husky

简介 Husky是一个大数据分布式开发框架,用C++开发,因为粗粒度(coarse-grained)平台(如Spark,Hadoop,Flink)MR耗时太大,然后细粒度(fine-grained)平台(GraphX等)编程难度较大,同时细粒度在数据平台之间转移会很耗时.Husky就是在粗粒度和细粒度之间做一个权衡,在PageRank上,他的性能是Spark的30+倍. Husky主页:http://www.husky-project.com/ 升级gcc到5.3 参见博客 http://www

Ubuntu 16.04 编译安装 ss

在网上没有找到合适的适合ubuntu的ss客户端, 考虑到ss的编译安装其实就带了ss-local这样的客户端, 于是在Ubuntu下编译安装了ss. 首先去github上下载最新的安装包 https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.0.8/shadowsocks-libev-3.0.8.tar.gz 下载最新的libsodium https://github.com/jedisct1/libsodi

Ubuntu 14.04 编译安装 boost 1.58

简介 Boost is a set of libraries for the C++ programming language that provide support for tasks and structures such as linear algebra, pseudorandom number generation, multithreading, image processing,regular expressions, and unit testing. It contains