草庐IT

Valgrind

全部标签

c++ - Valgrind 能捕捉到各种未定义的行为吗?

换句话说,如果我的程序在没有任何Valgrind错误消息的情况下运行,我能确定我的程序没有未定义行为吗? 最佳答案 这里有一个根本性的错误。Valgrind不是某种理解C++语法语义的静态分析工具,因此知道您何时按照C++标准的规定调用未定义的行为。Valgrind是一种工具,但是当您在内存中执行因程序的未定义行为而导致的操作时,它会提醒您。例如,它会检测您何时访问未分配或已释放的内存,它会检测您何时使用未初始化(或部分未初始化)的值/缓冲区进行系统调用等...打个医学类比,Valgrind检测未定义行为的症状。没有症状并不意味着没

c++ - Valgrind 和内存泄漏

我正在对我的软件进行一些内存分析,并在使用valgrind的以下命令运行标准内存泄漏检查后valgrind--tool=memcheck--leak-check=full./path_to_program我得到以下总结:==12550==LEAKSUMMARY:==12550==definitelylost:597,170bytesin7blocks==12550==indirectlylost:120bytesin10blocks==12550==possiblylost:770,281bytesin1,455blocks==12550==stillreachable:181,189

c - Valgrind 报告一个非常简单的 C 程序的错误

我正在从LearnCTheHardWay学习C语言.我在exercise6虽然我可以让它工作,但valgrind报告了很多错误。这是文件ex6.c中精简的最小程序:#includeintmain(intargc,char*argv[]){charinitial='A';floatpower=2.345f;printf("Characteris%c.\n",initial);printf("Youhave%flevelsofpower.\n",power);return0;}Makefile的内容就是CFLAGS=-Wall-g。我用$makeex6编译程序(没有编译器警告或错误)。使用

c++ - valgrind "Killed"消息

我正在运行的程序失败并出现中止陷阱(错误代码12)。为了调试错误,我正在运行valgrind,但每次我运行它时,valgrind本身都会崩溃,并显示一条“Killed”消息,没有其他消息(结束消息堆摘要等不显示)。我在谷歌或SO上找不到任何关于此的信息,我希望有人能阐明导致此错误的原因以及如何调试它。感谢任何帮助! 最佳答案 我认为您的进程可能会被内核的内存不足系统杀死-当系统内存不足时会以一种无法捕获的方式硬杀死进程,这就是为什么valgrind什么都不说就退出的原因.大概你的程序使用了大量内存,当在valgrind下运行时需要额

c++ - 带有 stringstreams 的 strdup 导致 valgrind 错误

我有以下问题:我正在编写一个必须环绕C库的C++程序,所以当我与库交互时,我总是必须使用char*而不是std::string用于所有操作。为了尽可能避免使用char*,我使用stringstreams进行格式化,例如:#include#include#include#includeusingnamespacestd;intmain(intargc,char**argv){ostringstreamstr;str就输出而言,程序正确输出“./test+hello”。但是,valgrind给了我很多类型的错误==30350==Invalidreadofsize1==30350==at0x

c++ - Valgrind 运行缓慢

我正在尝试找出泄漏的位置。我决定使用Valgrind。但是随着它的使用,应用程序的性能几乎下降了五倍。我可以使用Valgrind加速应用程序吗? 最佳答案 由于所有幕后虚拟化,memcheck工具会降低应用程序的速度。你可以研究commandlineparameters寻找加速环境的调整。作为gcc/clang的替代方案,使用-fsanitize=address进行编译和链接。这可能会以更少的性能限制检测到您的泄漏。 关于c++-Valgrind运行缓慢,我们在StackOverflow

c++ - 聚合初始化异常

在C++14(gcc6.3)中,我有以下代码:#include#include#includestructA{inta1;inta2;};structB{intb1;std::shared_ptr>Alist;};structC{std::shared_ptrb;std::shared_ptr>Alist;};std::shared_ptr>makeListA(){std::vectortoto={{0,1},{2,3}};returnstd::make_shared>(toto);}std::shared_ptr>makeListAWithException(){throwstd::

c++ - 为什么我在使用 Boost UUID 时会收到来自 Valgrind 的未初始化值警告?

我有一个类(class)成员:std::stringmName;boost::uuids::uuidmId;在我写的构造函数中:mName=boost::lexical_cast(mId);Valgrind写道:==30714==Useofuninitialisedvalueofsize8==30714==at0x69E92FC:???(in/usr/lib/libstdc++.so.6.0.16)==30714==by0x69E93EE:std::ostreambuf_iterator>std::num_put>>::_M_insert_int(std::ostreambuf_ite

c++ - 使用 valgrind 在内存泄漏检测中抑制 "dl-hack3-cond-1"

我正在使用valgrind来检测内存泄漏。valgrind的输出由命令生成valgrind-v--leak-check=full../spythontest.py2>/tmp/log事实上,我的程序是一个高度简化的python解释器(作业ToT),正如您可以从名称spythontest.py推断的那样困扰我的是底部的输出==24269==ERRORSUMMARY:0errorsfrom0contexts(suppressed:3from3)--24269----24269--used_suppression:3dl-hack3-cond-1这是什么意思?我查了一下,在valgrind的

c++ - 检测对范围外变量的访问

Codelikethis是未定义的行为,因为它访问一个不再在范围内(其生命周期已结束)的局部变量。intmain(){int*a;{intb=42;a=&b;}printf("%d",*a);//UB!return0;}我的问题:是否有自动检测此类错误的好方法?它似乎应该是可检测的(当变量超出范围时将堆栈空间的一部分标记为不可用,然后如果该空间被访问则提示),但是Valgrind3.10、Clang4的AddressSanitizer和UndefinedBehaviorSanitizer,以及GCC6的AddressSanitizer和UndefinedBehaviorSanitize