valgrind 自不必说

1.  Address Sanitize

很好有,只需要在gcc编译的时候,加上选项 -fsanitize=address

它的工程:https://github.com/google/sanitizers/wiki/AddressSanitizer

我的测试例子: https://github.com/tony-caotong/knickknack/tree/master/test/sanitize-address

运行的时候,遇见内存问题会直接退出,包括前边越界和后边越界,如下:

https://wizardforcel.gitbooks.io/100-gcc-tips/content/address-sanitizer.html

需要主要的是,在CentOS7里面,需要单独安装依赖库

[root@dpdk sanitize-address]# gcc --version
gcc (GCC) 4.8. (Red Hat 4.8.-)
Copyright (C) Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [root@dpdk sanitize-address]# yum search asan
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* epel: mirrors.ustc.edu.cn
* extras: mirrors.aliyun.com
* rpmfusion-free-updates: mirrors.ustc.edu.cn
* rpmfusion-nonfree-updates: mirrors.ustc.edu.cn
* updates: mirrors.shuosc.org
===================================================================================== N/S matched: asan =====================================================================================
libasan.i686 : The Address Sanitizer runtime library
libasan.x86_64 : The Address Sanitizer runtime library
libasan-static.i686 : The Address Sanitizer static library
libasan-static.x86_64 : The Address Sanitizer static library
oflb-asana-math-fonts.noarch : An OpenType font with a MATH table Name and summary matches only, use "search all" for everything.
[root@dpdk sanitize-address]# yum install libasan

使用gdb在报错的地方,打断点:

https://github.com/google/sanitizers/wiki/AddressSanitizerAndDebugger

也就是

(gdb)break __sanitizer::Die

但是, 在CentOS7里竟然不好使,因为这个库竟然没有symbol,我相信,有symbol的库定能成功break

[root@dpdk anthropoid]# nm /lib64/libasan.so.0.0.0
nm: /lib64/libasan.so.0.0.0: no symbols
[root@dpdk anthropoid]#

  comment @2018-01-26 当时的我还真是太傻太天真呢,还你相信。。。  正确的解释,请看:

    [daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件

2. mprotect

http://man7.org/linux/man-pages/man2/mprotect.2.html

linux系统API,可以在内存的前后扇区开始处,打上标签。当该标签被读写时,系统会给出提示。

3. 自己在内存前后打标记 --!!!

参考:http://www.cnblogs.com/djinmusic/archive/2013/02/04/2891753.html

后续:[daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件

[daily] 内存越界的分析与定位的更多相关文章

  1. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针

    1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 struct stude ...

  2. JVM内存区域异常分析

    在Java虚拟机规范描述中,除程序计数器外,其他几个运行时区域都有可能发生OutOfMemoryError异常.接下来将对各区域分别进行分析介绍,内容包括触发各区域OutOfMemoryError异常 ...

  3. IOS上解决内存越界访问问题

    IOS经常会混合使用C代码,而在C中,对内存的读写是很频繁的操作. 其中,内存越界读写 unsigned char* p =(unsigned char*)malloc(10); unsigned c ...

  4. uboot2012(一)分析重定位

    目录 引入 环境配置 编译体验 入口查找 代码分析 board_init_f pie 内存分布分析 SP设置 board_init_f 重定位 代码段重定位实现 变量地址修改 参考 title: ub ...

  5. linux内存源码分析 - SLAB分配器概述【转】

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...

  6. linux内存源码分析 - SLAB分配器概述

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...

  7. 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  8. Windows下使用Gflags检查内存越界

    环境:windows xp. vs2005 Gflags可用于查找内存越界的问题. 访问一块申请的内存时,当访问的地址超过申请的范围时,就发生了内存越界的问题. 编写测试程序MemoryOverflo ...

  9. C++ 内存泄露和内存越界

    内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新 ...

随机推荐

  1. (Java编程思想)Thinking in Java

    1. 为什么突然想去研读<Thinking in Java>? 最近终于下定决心撸了一本<Thinking in Java>第四版,虽然在此之前我就久闻这本书的大名,但一直未曾 ...

  2. Mycat源码中的单例模式

    在MyCat的源码中,很多对象都使用到了单例模式. 首先是MycatServer类,该实例必须全局唯一,所以这里涉及到JAVA的单实例模式,就是一个类只有唯一一个实例对象存在.先来看看mycat源码是 ...

  3. js实现cookie跨域功能

    /** * 设置cookie方法 * @param {string} name cookie键值 * @return {*} 返回cookie值 */ function setCookie_log(c ...

  4. 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入

    实验现象: iCore1s 双核心板上与FPGA相连的三色LED(PCB上标示为FPGA·LED),按键按下红灯点亮,松开按键红灯熄灭. 核心源代码: module KEY( input CLK_12 ...

  5. [转载][IoC容器Unity]第二回:Lifetime Managers生命周期

    1.引言 Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理,非常方便,下面就介 ...

  6. hdoj:2032

    #include <iostream> #include <string> using namespace std; int main() { int n; ][]; ; i ...

  7. WebRTC 零基础开发者教程(中文版)下载

    WebRTC 简介 WebRTC,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术. WebRTC提 ...

  8. 仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)

    由于上一个教程做界面用的是MFC,所以这里不得不说一下MFC的历史,请看正文:   原文链接:http://blog.csdn.net/sunhui/article/details/319551 作者 ...

  9. [DQN] What is Deep Reinforcement Learning

    已经成为DL中专门的一派,高大上的样子 Intro: MIT 6.S191 Lecture 6: Deep Reinforcement Learning Course: CS 294: Deep Re ...

  10. 《objective-c基础教程》学习笔记 (一)—— 开发环境配置和简单类型输出

    懒惰是富有最大的敌人,再不前进,我们就out了.最近工作比较轻松,不是很忙.于是想晚上下班回家学习点新东西.看着苹果大军的一天天壮大,心里也是痒痒的.于是就想先系统的学习下Objective-C,为之 ...