标签: valgrind

我如何运行valgrind到一个超级用户位的进程?

我按如下方式运行valgrind: -

/ usr/local/bin/valgrind"process_name"

在执行之后它给我跟随错误

==21731==
==21731== Warning: Can't execute setuid/setgid executable: 
==21731== Possible workaround: remove --trace-children=yes, if in effect
==21731==
valgrind: "process name": Permission denied
Run Code Online (Sandbox Code Playgroud)

我的valgrind权限如下: - -r-sr-xr-x/usr/local/bin/valgrind

我的进程权限如下: - -r-sr-xr-x"process_name"

平台:Linux VMLINUX3 2.6.9-78.0.22.ELsmp(RHEL)

Valgrind版本:valgrind-3.5.0

任何有关这方面的帮助将不胜感激

linux memory valgrind setuid

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

Valgrind在为字符串赋值时报告内存泄漏

Valgrind在为字符串赋值时报告内存泄漏.

我使用以下简单代码来测试Valgrind报告的内存泄漏.

/******************************************
* FILE: t3.c
* Compiled using : g++ -g t3.c -o t3
*
* $ g++ -v
* Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/specs
* Configured with: ./configure --prefix=/usr --infodir=/share/info --mandir=/share/man
*      --enable-languages=c,c++ --with-system-zlib --program-suffix=-3.4 --enable-threads=posix
* Thread model: posix
* gcc version 3.4.6
 ******************************************/


#include <iostream>
#include <string>

using namespace std;

/**************************************************************
 **************************************************************/
int main(int argc, char *argv[])
{
   string test = "XXXXXXXXX";
   cout << "this is a test " << test << endl;
   exit(0);
}
Run Code Online (Sandbox Code Playgroud)

我使用这个命令编译:

$ …
Run Code Online (Sandbox Code Playgroud)

c++ string valgrind memory-leaks g++

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

valgrind,分析计时器到期了吗?

我尝试使用valgrind来描述一个简单的c prog:

[zsun @ nel6005001~] $ valgrind --tool = memcheck ./fl.out
== 2238 == Memcheck,内存错误检测器
== 2238 == Copyright(C)2002-2009,GNU GPL'd,Julian西沃德等人.
== 2238 ==使用Valgrind-3.5.0和LibVEX; 重新运行-h版权信息
== 2238 ==命令:./ fl.out
== 2238 ==
== 2238 ==
== 2238 == HEAP SUMMARY:
== 2238 ==在退出时使用:1,168字节in 1个块
== 2238 ==总堆使用量:1个allocs,0个frees,1,168个字节分配
== 2238 ==
== 2238 == LEAK SUMMARY:
== 2238 ==绝对丢失:0个块中的0个字节
== 2238 = =间接丢失:0个块中的0个字节
== 2238 ==可能丢失:0个块中的0个字节
== 2238 ==仍然可达:1个块中的1,168个字节
== 2238 ==抑制:0个块中的0个字节
== 2238 ==重新运行--leak-check = full以查看泄漏内存的详细信息
== 2238 ==
== 2238 …

valgrind

10
推荐指数
2
解决办法
7008
查看次数

发送信号到valgrind内的进程?

如何向在valgrind内部运行的进程发送信号以检查其内存使用状态?

谢谢!

valgrind memory-leaks

10
推荐指数
1
解决办法
4557
查看次数

C内存泄漏,尽管免费

在用Valgrind调试我的程序时,我发现了一个内存泄漏,尽管我认为是有效的免费调用.首先,分配内存并存储它的代码:

    row = malloc(sizeof(Row));
    row->columns = malloc(sizeof(char*) * headcnt);
    row->numcol  = 0;

    ...

    row->numcol    = colcnt;
    rows           = realloc(rows, (rowcnt+1) * sizeof(Row));
    rows[rowcnt++] = *row;
Run Code Online (Sandbox Code Playgroud)

负责尝试释放内存的代码:

void cleanUp(){
    int i = 0;
    int j = 0;

    for (i = 0; i < rowcnt; i++){
        for (j = 0; j < rows[i].numcols; j++){
            free(rows[i].columns[j]);
        }
        free(&rows[i]);
    }
    free(rows); 
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

Row的声明:

typedef struct {
    char** columns;
    unsigned short int numcol;
} Row;

Row* rows = NULL;
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,这个程序有时会导致glibc错误,free(&rows[i])因为抱怨双重免费.我是C的新手,并且会感谢有人可能提出的任何指针(咳咳).

c memory valgrind pointers

10
推荐指数
2
解决办法
579
查看次数

Valgrind在使用Boost线程时报告"可能丢失"内存

我有一个程序在一个单独的therad中运行一些动作,然后加入线程,比如这个:

#include <boost/thread.hpp>
#include <iostream>

using namespace std;

void f() {
    for (int i = 0; i < 100; ++i) cout << i << endl;
}

int main() {
    boost::thread t(f);
    t.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我在其上运行Valgrind,它会报告"可能丢失"的内存.如果省略join(),这似乎是合乎逻辑的,因为在这种情况下,当程序退出时线程仍在运行.但如果线程完成,我希望没有警告.

这是回溯:

==8797== 288 bytes in 1 blocks are possibly lost in loss record 2 of 3
==8797==    at 0x4A1F8B3: calloc (vg_replace_malloc.c:467)
==8797==    by 0x400F289: allocate_dtv (in /lib64/ld-2.4.so)
==8797==    by 0x400F34D: _dl_allocate_tls (in /lib64/ld-2.4.so)
==8797==    by 0x53EF981: pthread_create@@GLIBC_2.2.5 (in /lib64/libpthread-2.4.so)
==8797==    by 0x4B3311D: …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading valgrind g++ boost-thread

10
推荐指数
1
解决办法
932
查看次数

如何将管道作为valgrind的输入?

我想用几乎自动化的工具检查我的程序内存(我还不是很好的gdb),所以我最后使用了valgrind.

但是,我想把一个烟斗作为valgrind的输入; 即我想提出以下内容:

 >cat file.h | ./prog 
Run Code Online (Sandbox Code Playgroud)

我试着做一个

 >valgrind `cat file.h | ./prog`
Run Code Online (Sandbox Code Playgroud)

没有成功.

我还尝试制作一个脚本文件,然后将整个命令放入其中,然后将其传递给valgrind,但没有成功.

linux valgrind

10
推荐指数
1
解决办法
3527
查看次数

Valgrind不会检测缓冲区溢出

#include <stdio.h>
main()
{     
    char buf[8];
    sprintf(buf,"AAAA%3s","XXssssssssXXXsssssXXX");
    printf("%s\n",buf);
}
Run Code Online (Sandbox Code Playgroud)

我希望valgrind能够使用上面的代码检测缓冲区溢出.但它不会报告任何错误或警告.我需要为此启用任何特殊标志吗?

c valgrind buffer-overflow

10
推荐指数
1
解决办法
1409
查看次数

如何更新make 3.81 linux

我是Linux新手(昨天安装的新版本),我在大学的编程课程中需要它,我被告知要安装特定程序的特定版本,但是我已经使用了apt-get install来安装他们(以前做过apt-get更新)他们的版本不正确.

我需要的程序是make 4.0和valgrind 3.10.1.

apt-get installs make 3.81和valgrind 3.10.0.SVN.

我尝试输入"apt-get install make4.0"和"apt-get install valgrind10.3.1"无济于事.我已经从互联网上下载了它们,并按照我可以理解的说明安装新版本,但它一直说我有旧的版本.(我不确定我是否可以在这里发布直接链接,如果我可以告诉我,我会发布我从哪里发布).

我做错了什么?我怎样才能解决这个问题?

我目前正在运行Linux Mint.

谢谢你提前回答.

linux valgrind makefile updates linux-mint

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

Kcachegrind.仅显示我的代码中的函数

我想描述一下我的代码.所以我这样做:

valgrind --tool=callgrind my_program [programm arguments]
kcachegrind callgrind.out.x
Run Code Online (Sandbox Code Playgroud)

现在我有这样的kcachegrind窗口:

在此输入图像描述

有很多核心和库函数,但是我如何设置valgrindkcachegrind仅跟踪函数在我的代码中(当然,它还有调用库函数)?

预期的输出是这样的:

  time  number of calls            function_name()
  4,52%  569854          CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  452158          CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  36569           CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  1258            CSim2Sim  my_function4(int argc, char* argv[])
Run Code Online (Sandbox Code Playgroud)

c++ valgrind callgrind kcachegrind

10
推荐指数
2
解决办法
1827
查看次数