标签: valgrind

Valgrind对未经初始化的字节大喊大叫

Valgrind抛出了这个错误:

==11204== Syscall param write(buf) points to uninitialised byte(s)
==11204==    at 0x4109033: write (in /lib/libc-2.13.so)
==11204==    by 0x8049654: main (mmboxman.c:289)
==11204==  Address 0xbe92f861 is on thread 1's stack
==11204== 
Run Code Online (Sandbox Code Playgroud)

有什么问题?我无法找到它正在大喊大叫的未初始化的字节.以下是犯罪行代码(提到的289行是调用函数lockUp的行):

Request request;            
Response response;              

fillRequest(&request, MANADDUSER, getpid(), argument1, NULL, NULL, 0, 0);
lockUp(&request, &response, NULL);
Run Code Online (Sandbox Code Playgroud)

这里函数原型和结构声明:

void fillRequest(Request *request, char code, pid_t pid, char *name1, char *name2, char   *object, int id, size_t size)
{
    int k;

    request->code = code;
    request->pid = getpid();

    if(name1)    for(k=0; k<strlen(name1)+1; k++)   request->name1[k] = name1[k];
    else …
Run Code Online (Sandbox Code Playgroud)

c valgrind

25
推荐指数
1
解决办法
3万
查看次数

如何让ctest用valgrind运行一个没有dart的程序?

我想写一个CMakeLists.txt,以便我可以正常运行我的测试或使用valgrind.我已经看到很多关于将ctest与valgrind集成,但所有这些都假设您要设置服务器以将测试结果提交到飞镖仪表板.我只想在我的机器上运行测试并在命令行上查看结果.

如果我必须做一个cmake -D VALGRIND = ON就好了,但如果可能的话,我宁愿生成名为"foo"和"valgrind_foo"的测试.

valgrind cmake

25
推荐指数
2
解决办法
1万
查看次数

记忆/地址Sanitizer vs Valgrind

我想要一些工具来诊断用户免费后的错误和未初始化的错误.我正在考虑Sanitizer(记忆和/或地址)和Valgrind.但我对它们的优点和缺点一无所知.谁能说出Sanitizer和Valgrind的主要特征,差异和优缺点?

编辑:我发现了一些比较:Valgrind使用DBI(动态二进制检测),Sanitizer使用CTI(编译时检测).无论Sanitizer的运行速度比Valgrind(2x)快得多,Valgrind都能让程序慢得多(20倍).如果有人能给我一些更重要的要点,那将是一个很大的帮助.

valgrind address-sanitizer memory-sanitizer

25
推荐指数
1
解决办法
9158
查看次数

如何在Mac上构建和安装Valgrind?

我在Mac OS X上使用代码块10.05

我下载了Valgrind,并提取了一个文件夹.我完全迷失了,并且不知道如何构建它.

我不知道任何终端/控制台命令,并且通常是编程新手,所以我不知道如何"构建"或"编译"它.我只有一个名为Valgrind的文件夹,里面有一堆随机文件.

有人可以告诉我怎么办?我已经检查了网站/文档,但它并没有真正给我安装说明,只是使用说明.

谢谢

PS:我知道我已经发布了这个问题,但之前的问题因为太模糊而被关闭了.我重新发布了这个更多信息.

PSS:我基本上要问的是,在从网站下载并提取文件后,我该如何安装Valgrind?

valgrind build

24
推荐指数
4
解决办法
6万
查看次数

如何使用valgrind启动Android应用程序

我一直在寻找上周试图找到这个问题的答案.

如何使用valgrind启动Android应用程序?我知道我可以使用'am'命令启动应用程序,但它会启动应用程序并退出.

我正在编写一个将NDK用于本机C代码的应用程序,我需要检查它是否存在可疑的内存错误.

编辑:

我学到了更多.您可以使用shell脚本"包装"应用程序.

这是我正在使用的shell脚本:

#!/system/bin/sh
VGPARAMS='--error-limit=no'
export TMPDIR=/data/data/com.starlon.froyvisuals
exec /data/local/Inst/bin/valgrind $VGPARAMS $*
Run Code Online (Sandbox Code Playgroud)

这是setprop:

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper valgrind"
Run Code Online (Sandbox Code Playgroud)

以下是我启动应用的方式:

adb shell am start -n com.starlon.froyvisuals/.FroyVisuals
Run Code Online (Sandbox Code Playgroud)

我不认为这是对的,因为我不确定shell脚本适合哪里,我在logcat中没有看到任何东西.任何提示?

Edit2:哦shell脚本用上面的"setprop"命令表示.所以

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper /data/local/val.sh"
Run Code Online (Sandbox Code Playgroud)

我还没有在logcat中看到任何东西.

android valgrind android-ndk gdbserver

24
推荐指数
1
解决办法
2万
查看次数

Valgrind报告使用glib数据类型时内存"可能已丢失"

我正在使用许多glib数据结构(GHashTable,GSList等)开发库.我一直在使用valgrind经常检查我的代码是否有内存泄漏.valgrind指出的大多数问题很容易解决,但有一些我无法弄清楚.

所有这些都被报道为"可能丢失".

在valgrind stacktrace的顶部,我总能找到相同的4个库:

==29997== 1,512 bytes in 3 blocks are possibly lost in loss record 24 of 25
==29997==    at 0x4004B11: memalign (vg_replace_malloc.c:532)
==29997==    by 0x4004B6B: posix_memalign (vg_replace_malloc.c:660)
==29997==    by 0x5E9AC4: ??? (in /lib/libglib-2.0.so.0.1200.3)
==29997==    by 0x5EA4FE: g_slice_alloc (in /lib/libglib-2.0.so.0.1200.3)
Run Code Online (Sandbox Code Playgroud)

在调用堆栈中,总是调用glib函数,例如g_key_file_new(),g_slist_prepend(),g_strsplit(),g_key_file_load_from_file(),g_file_get_contents().

我的问题是:

  • 有没有人遇到这个并找到了解决方法?

  • 或者这是我可以忽略的东西?是否由于glib使用内存池,如此处所示

我在用

  • 的valgrind-3.5.0
  • 巧舌如簧-2.12.3
  • gcc(GCC)4.1.2 20080704(Red Hat 4.1.2-48)
  • CentOS 5.5版(最终版)

c valgrind glib

23
推荐指数
1
解决办法
7386
查看次数

是否有Valgrind Memcheck之类的工具用于Windows免费错误后调试使用?

在我的工作中,我经常面对相当常见的编程错误 - 使用一些已经被释放的对象.这在C++中调用UB.在linux上,通常使用Valgrind工具Memcheck来解决这类问题.来自Memcheck手册:

Memcheck试图确定非法地址可能涉及的内容,因为这通常很有用.因此,如果它指向已经释放的内存块,您将被告知这一点,以及块被释放的位置.

Memcheck为我提供了调用堆栈,对象被解除分配,我可以继续调试问题.是否有类似的工具用于具有相同功能的Windows,最好是免费的?

c++ windows debugging valgrind

23
推荐指数
4
解决办法
3万
查看次数

安装Valgrind时失败

我正在尝试在带有Snow Leopard的Mac上安装Valgrind但是我遇到了错误.这就是我在Terminal中输入的内容.

$ curl -O http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2
$ md5sum valgrind-3.8.1.tar.bz2
$ tar -xjvf valgrind-3.8.1.tar.bz2
$ cd valgrind-3.8.1
$ ./configure
$ make
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

Making all in coregrind
make[2]: *** No rule to make target `/usr/include/mach/mach_vm.defs', needed by `m_mach/mach_vmUser.c'.  Stop.
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

我该如何更正此错误?

macos valgrind makefile darwin

23
推荐指数
2
解决办法
9682
查看次数

valgrind - Address ----在大小为8的块之后为0字节

首先,我知道有类似的问题.但是,我希望有一个更普遍的简单问题,真正原始的C数据类型.所以这就是.

main.c我调用一个函数来填充这些字符串:

int
main (int argc, char *argv[]){

    char *host = NULL ;
    char *database ;
    char *collection_name;
    char *filename = ""; 
    char *fields = NULL;
    char *query = NULL;
    ...

    get_options(argc, argv, &host, &database, &collection_name, &filename, 
                &fields, &query, &aggregation);
Run Code Online (Sandbox Code Playgroud)

内部get_options:

if (*filename == NULL ) {
   *filename = (char*)realloc(*filename, strlen(*collection_name)*sizeof(char)+4);
    strcpy(*filename, *collection_name);
    strcat(*filename, ".tde");  # line 69 
}
Run Code Online (Sandbox Code Playgroud)

我的程序工作正常,但Valgrind告诉我,我做错了:

==8608== Memcheck, a memory error detector
==8608== Copyright (C) 2002-2011, and GNU GPL'd, by …
Run Code Online (Sandbox Code Playgroud)

c linux valgrind

23
推荐指数
3
解决办法
5万
查看次数

安装valgrind时出错

我尝试在我的Mac上安装valgrind但是当我执行时./autogen.sh得到这个错误:

running: aclocal
./autogen.sh: line 6: aclocal: command not found
error: while running 'aclocal'
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

macos valgrind

23
推荐指数
4
解决办法
2万
查看次数