草庐IT

gtest_valgrind

全部标签

c++ - 对 valgrind 的补充?

在过去的几周里,我一直在努力寻找一个导致我的应用程序崩溃的非常困难的错误。首先,应用程序在分配std::string时崩溃,然后在释放局部变量期间崩溃。仔细检查代码后,没有理由在这些位置崩溃;但是,它总是在尝试释放无效指针(即指向无效内存的指针)时崩溃。我不知道为什么这个指针没有指向正确的位置。我怀疑这个问题与某种内存损坏问题或指针损坏问题有关。问题是我无法在视觉上追踪到它……但是。我不知道从哪里开始查看代码,而且有数千行代码要查看,所以这似乎不是解决问题的现实方法。Valgrind应运而生......我多次依赖该工具来查找代码中可能导致此类崩溃的问题。然而,这一次却空手而归!当问题发

c++ - 为什么 valgrind 没有在我的 "test"程序中检测到内存泄漏?

整个测试代码包含在main.cpp中如下:#includeusingstd::cout;usingstd::endl;voidf(inti){int*pi=newint;*pi=i;std::cout我编译时没有优化-O0(来自EclipseQt项目):g++-c-pipe-O0-Wall-W-D_REENTRANT-DQT_NO_DEBUG-DQT_GUI_LIB-DQT_CORE_LIB-DQT_SHARED-I/usr/share/qt4/mkspecs/linux-g++-I.-I/usr/include/qt4/QtCore-I/usr/include/qt4/QtGui-I

c++ - ASSERT_TRUE() 返回类型与 gtest 中的函数类型不匹配

当我使用Gtest中提供的ASSERT_TRUE()时,出现以下错误。返回类型与函数类型不匹配,在VS2010.中带有下划线。abc.h#include"gtest\gtest.h"classabc{pubilc:boolfun();private:boolfun1();};abc.cboolabc::fun(){ASSERT_TRUE(fun1());//Gettingerror:returntypedoesnotmatchfunctiontype}boolabc::fun1(){returntrue;//Trueorfalsedepandingonoperation}

c++ - 使用 gtest 和 google sparsehash 时元组的重新定义

所有以某种方式包含的测试用例和无法为我build。通常后者是间接包含的,但我可以像这样重现问题:#include#includeTEST(SparsehashTest,justPass){ASSERT_TRUE(true);};intmain(intargc,char**argv){::testing::InitGoogleTest(&argc,argv);returnRUN_ALL_TESTS();}问题:Infileincludedfrom/usr/include/c++/5/tr1/functional:39:0,from/usr/local/include/sparsehash

c++ - 基本 Qt 应用程序 : Reports Masive Leaks 上的 Valgrind

所以我想看看当通过Valgrind运行时,从简单的Makefile编译的基本Qt4应用程序会发生什么。什么会导致这些泄漏?我正在删除我这边的任何动态分配的对象。另外,退出程序时,我只单击右上角的关闭(X)。GUI库是否只是“free()”它们malloc()的任何内存?由qmake命令缩减的Makefile是:#######Compiler,toolsandoptionsCXX=g++CXXFLAGS=-pipe-O2-Wall-WLIBS_INCLUDE=${HOME}INCPATH=-I$(LIBS_INCLUDE)/QtSDK/Desktop/Qt/473/gcc/mkspecs

c++ - 无论如何有一个 valgrind 消息 "Conditional jump or move depends on uninitialized value"可以是所谓的 'false positive'

我在这里找到的大多数问题都提供一段代码,并由指出实际错误的人回答。我的问题是关于一般未初始化值的条件跳转。我可以理解,如果确定此分配仅完成一次并且在程序的生命周期内可能需要,则不必在程序结束时清理一block内存。据我所知,当程序终止时,GType系统会留下大量未释放的内存。这些未释放的block可以被视为“误报”。但是“有条件的跳跃或移动未初始化的值”会是误报吗?我唯一能想出的是有人通过读取随机地址来实现(坏的)随机函数(其中随机地址本身是棘手的部分;)。另一个例子可能是硬件映射到内存的一部分然后被读取,但这主要是由驱动程序而不是由普通用户应用程序完成的。是否有任何其他示例(最好是C

c++ - 与 -static 链接时出现 Valgrind 错误——为什么?

我有一个测试驱动程序链接到我编写的库。该库使用autotools,因此它会生成存档(.a文件)和动态库(.so)。当我将我的驱动程序与“g++-static”链接时,大概是链接到.a,valgrind点亮并反复提示“条件跳转或移动取决于未初始化的值”。第一次失败发生在__pthread_initialize_minimal中的main之前。当我在没有-static的情况下进行链接时,大概是在使用.so进行链接时,我没有收到任何valgrind投诉。有人知道为什么吗?valgrind是否不能与-static一起使用?更新:我什至无法发布我的驱动程序的精简版本,因为它链接到一个我无法精简的

c++ - 如何检测程序是否在 valgrind 中运行?

有没有办法在运行时识别正在从valgrind中运行的可执行文件?我有一组C++单元测试,其中一个期望std::vector::reserve抛出std::bad_alloc。当我在valgrind下运行它时,它完全退出,阻止我测试内存泄漏(使用valgrind)和行为(期望抛出异常)。这是一个重现它的最小示例:#includeintmain(){size_tuint_max=static_cast(-1);std::vectorv;v.reserve(uint_max);}运行valgrind,我得到这个输出:Warning:sillyarg(-1)to__builtin_new()n

c++ - 空文件中的 Valgrind C++ 内存泄漏

我对valgrind中的“额外”内存泄漏有疑问。例如,我创建了一个名为temp.cpp的测试程序:intmain(){return0;}在终端中,我运行:>>g++-otemp.outtemp.cpp>>valgrind--tool=memcheck--leak-check=full--show-leak-kinds=all./temp.out这会导致多次内存泄漏。怎么会这样?==4438==LEAKSUMMARY:==4438==definitelylost:4,120bytesin2blocks==4438==indirectlylost:2,288bytesin6blocks==

c++ - 解释 Valgrind 的 trace-malloc 输出

Valgrind是一个出色的内存调试器,它有选项--trace-malloc=yes,它产生如下内容:--16301--malloc(8)=0x4EAD748--16301--free(0x4EAD748)--16301--free(0x4EAD498)--16301--malloc(21)=0x4EAD780--16301--malloc(8)=0x4EAD838--16301--free(0x4EAD6F8)--16301--calloc(1,88)=0x4EAD870--16301--realloc(0x0,160)malloc(160)=0x4EB1CF8--16301--re