草庐IT

Valgrind

全部标签

c++ - valgrind 如何以及何时检测内存泄漏

我的代码中存在内存泄漏。堆随着流的触发而不断增加。在我的代码中,我有一个while(1)循环,它基本上在队列中等待。当从web服务触发该流时,传入的消息被插入队列,并调用c++中的一个方法,该方法接收消息并实现图形形式的流。对于每个触发器,我发现堆中的内存增加了604kb。我需要解决这个问题。我停止了服务[在产品中运行的二进制文件]。我用valgrind启动了服务[将二进制文件作为valgrind的输入]valgrind--log-file=/home/valgrind-output.txt--leak-check=full但是当二进制文件运行时它没有显示任何泄漏,只有当我停止服务时我

c++ - 是否存在 valgrind 不会报告现有泄漏/错误的情况

我第一次检查valgrind,我喜欢当前的结果,但是我很好奇valgrind是否总是会返回它遇到的内存泄漏,或者是否有一些可能会避免,具体取决于如何该程序已关闭。例如,如果使用“killall-9program”终止程序。这是我当前程序的结果,通过在Ubuntu系统监视器中使用“结束进程”停止==10182==HEAPSUMMARY:==10182==inuseatexit:0bytesin0blocks==10182==totalheapusage:8,747,225allocs,8,747,225frees,1,352,535,387bytesallocated==10182===

c++ - 如何使用 KCachegrind 和 Callgrind 来测量我的部分代码?

我想使用valgrind来分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。我在valgrind/callgrind.h中找到了对我有帮助的定义:CALLGRIND_START_INSTRUMENTATIONCALLGRIND_STOP_INSTRUMENTATIONCALLGRIND_DUMP_STATS根据thisarticle我必须使用以下选项执行valgrind:valgrind--tool=callgrind--instr-atstart=no./application当我这样做时,会创建两个文件:callgrind.out.16060callgrind.out.160

c++ - 全局重载运算符 new/new[] delete/delete[] C++

我有这个重载operatornew和delete的示例代码#include#include#include#ifdefUSE_ZMALLOCextern"C"{#include"zmalloc.h"}#definem_malloczmalloc#definem_freezfree#else#ifdefUSE_JEMALLOC#include#definem_mallocje_malloc#definem_freeje_free#else#include"malloc.h"#definem_mallocstd::malloc#definem_freestd::free#endif#end

c++ - 如何合并同一进程多次运行的 Valgrind memcheck 报告?

我有一组每晚运行的验收测试。我想使用valgrind自动检查我的代码中的内存泄漏,作为手动检查泄漏的额外安全措施。更新我的脚本以在valgrind下运行我的进程是微不足道的,但是,每个测试都会启动和停止许多进程并且有大约15000个测试用例,所以我最终会得到数千个单独的报告。是否有能够合并这些报告的工具?我看过valkyrie,但根据文档,他们不支持valgrind3.5 最佳答案 如果您的代码大部分是干净的,那么您可以只保留错误情况。如果您要使用一种工具来组合输出,那么valgrindxml输出格式可能是正确的开始。至少然后解析不

c++ - 最小程序在 g++ 上产生 Valgrind 警告,但在 clang 或 VS 上不产生警告

我一直在疯狂地追踪一个中型项目中的内存错误。我将一个代码最小化为以下代码,并验证这会导致Valgrind在注释行号处发出无效读取警告。我正在为项目使用g++4.8.2(Debian4.8.2-16),使用-std=c++11-O0进行编译。g++4.7.0也会产生错误,4.4.6在稍作修改的版本(删除C++11)上也会产生错误。clang++不会导致错误,VS2013也不会。我的问题是:我是否在不知不觉中从事未定义的行为?这是Valgrind误报吗?如果是,我如何才能让自己放心,以后会遇到这样的情况?这段代码相当脆弱——特别是,让foo通过引用获取坐标可以消除这个问题,为Coord选择

c++ - CppUnit泄漏

用valgrind运行我的回归测试我有这样的报告:==20341==256bytesin1blocksareindirectlylostinlossrecord915of919==20341==at0x4A0661C:operatornew(unsignedlong)(vg_replace_malloc.c:220)==20341==by0x7F366FA:std::vector>::_M_insert_aux(__gnu_cxx::__normal_iterator>>,CppUnit::Test*const&)(new_allocator.h:88)==20341==by0x7F3

c++ - MsgPack 中不匹配的 free()/delete

我尝试在我的程序中使用Msgpack。有人可以帮我解决msgpackwiki中的下一个示例(流媒体功能)吗:http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387并提供更正确的使用这个库的流媒体功能的例子。#include#include#includeintmain(void){//serializesmultipleobjectsusingmsgpack::packer.msgpack::sbufferbuffer;msgpack::packerpk(&buffer);pk.pack(std::string("Log

c++ - Valgrind 挂起以分析多线程程序

我有一个在多核机器上运行的多线程程序(在Linux平台上使用Pthreads在C中实现)。我使用带有--memcheck选项的ValGrind来查找我的代码中存在的一些内存问题。但它挂起。为了完整地概述问题,这里是背景。代码在开始时有一些顺序部分作为初始化的一部分,随后它创建了8个线程(使用PthreadAPI)和梯级以完成。一段时间后,我的代码转储“核心”。我使用了GDB,它给出了以下跟踪。=======Backtrace:=========/lib/tls/i686/cmov/libc.so.6[0xb7cd47cd]/lib/tls/i686/cmov/libc.so.6(cfr

c++ - Valgrind 在空析构函数上给出 "Invalid write of size 8"

我有一个声明:std::map*myMap;进入某个类A。这个映射是在A的构造函数中创建的:myMap=newstd::map;MyClass类基本上是一个结构,用于存储一些带有一些getter/setter的数据。MyClass中没有任何指针或新实例,只有一对枚举值、一个无符号整数和一个bool值。所以MyClass析构函数是空的。另一方面,在A的析构函数中我正在删除映射:A::~A(){if(myMap!=NULL){deletemyMap;myMap=NULL;}}这里Valgrind在删除行上告诉我“地址0x4c389b0是一个大小为48的block内的16个字节free'd[