C++/C内存问题检测工具
文章平均质量分 84
尚先生的博客
这个作者很懒,什么都没留下…
展开
-
Valgrind Memcheck 源码分析
Valgrind是用于构建程序动态分析工具的重量级插桩框架。目前Valgrind内置的工具,可用于检测内存管理和线程竞争等等过程中产生的问题,更快速、更准确和更详细地分析所需的程序。其中,Memcheck是valgrind应用最广泛的工具。它是一个重量级的内存检查器,能够发现C或者C++在开发过程中绝大多数导致程序崩溃或者不可预知的行为的内存相关的错误,比如:使用未初始化的内存、使用已释放内存、内存访问越界等。转载 2024-03-14 14:54:15 · 180 阅读 · 0 评论 -
linux之Oops原理及解析
什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们的Linux内核也会抱歉的对我们说:“哎呦(Oops),对不起,我把事情搞砸了”。转载 2024-02-27 15:45:59 · 655 阅读 · 0 评论 -
C语言--backtrace调用栈信息解决程序崩溃问题总结
有上面的认识后那我们就只需要得到此次libadd.so的加载地址然后用0x7f85839fa5c6这个地址减去libadd.so的加载地址得到的结果再利用addr2line命令就可以正确的得到出错的地方;当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在这种情况下是通过拿到出问题时产生的core文件然后再利用gdb调试来看到出错时的程序栈信息,这是再好不过的了,但当某些特殊的情况如不正确的系统设置或文件系统出现问题时导致我们没有拿到core文件那我们还有补救的办法吗?转载 2024-02-26 22:59:03 · 645 阅读 · 0 评论 -
Valgrind——memcheck内存泄漏分析
valgrind 官网 https://www.valgrind.org/valgrind 是 Linux 业界主流且非常强大的内存泄漏检查工具。在其官网介绍中,内存检查(memcheck)只是其其中一个功能。valgrind 默认使用 memcheck 去检查内存问题。valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序。Valgrind的架构采用模块化设计,因此可以轻松创建新工具,而不会干扰现有结构。转载 2024-02-01 15:56:18 · 1425 阅读 · 0 评论 -
Cppcheck代码分析
Cppcheck代码分析转载 2024-01-06 11:49:19 · 295 阅读 · 0 评论 -
可见性、有序性、原子性
同样,写入数据的顺序也一样。程序不一定是按照顺序执行的,为了提高CPU的利用率,让CPU尽可能多的工作,CPU会在某些语句当中选择"乱序执行"。有,即便是只有单核CPU,在一些比较耗时的操作例如等待网络响应,等待IO等操作时,CPU也是处于待机阶段,如果在这段时间里,有其他线程可以把这个空闲时间利用起来,CPU的利用效率是特别高的,会比单线程执行更快。在修改数据的值时,会首先读一下要修改数据的原值,之后在执行修改操作前看看刚才读的值和内存中现在存储的值相不相同,如果不相同,返回false,不进行操作。原创 2023-12-27 23:37:40 · 402 阅读 · 0 评论 -
valgrind 详解
Valgrind 是一套 Linux 下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind 由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个 CPU 环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。转载 2022-11-24 18:56:09 · 479 阅读 · 0 评论 -
【Linux】Valgrind工具集详解
Valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序。Valgrind的架构采用模块化设计,因此可以轻松创建新工具,而不会干扰现有结构。转载 2022-11-24 18:27:14 · 876 阅读 · 0 评论 -
KASAN实现原理
KASAN是一个动态检测内存错误的工具。转载 2022-11-24 14:02:57 · 506 阅读 · 0 评论 -
Linux下内存检测工具:asan
ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持。因此GCC 4.8以上版本使用ASAN时不需要安装第三方库,通过在编译时指定编译CFLAGS即可打开开关。转载 2022-11-24 10:05:58 · 1637 阅读 · 0 评论 -
linux内存屏障浅析
内存屏障是一个很神奇的东西,之前翻译了linux内核文档memory-barriers.txt,对内存屏障有了一定有理解。现在用自己的方式来整理一下。在我看来,内存屏障主要解决了两个问题:单处理器下的乱序问题和多处理器下的内存同步问题。为什么会乱序现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执转载 2021-01-18 13:50:00 · 200 阅读 · 0 评论 -
gcc中__builtin_return_address
1、gcc默认不支持__builtin_return_address(LEVEL)的参数为非0。好像只支持参数为0。2、__builtin_return_address(0)的含义是,得到当前函数返回地址,即此函数被别的函数调用,然后此函数执行完毕后,返回,所谓返回地址就是那时候的地址。3、__builtin_return_address(1)的含义是,得到当前函数的调用者的返回地址。注意是调用者的返回地址,而不是函数起始地址。#include <stdio.h>#include &原创 2021-01-11 17:50:25 · 5572 阅读 · 0 评论 -
Address Sanitizer(Asan)原理及实战定位
AsanASAN(AddressSanitizer的缩写)是一款面向C/C++语言的内存错误问题检查工具,可以检测如下内存问题:使用已释放内存(野指针) 堆内存越界(读写) 栈内存越界(读写) 全局变量越界(读写) 函数返回局部变量 内存泄漏ASAN工具主要由两部分组成:编译器插桩模块 运行时库运行时库:(libasan.so.x)会接管malloc和``free函数。malloc执行完后,已分配内存的前后(称为“红区”)会被标记为“中毒”状态,而释放的内存则会被隔离起来(暂时不转载 2020-09-25 14:41:43 · 5169 阅读 · 0 评论