g*********s 发帖数: 1782 | 1 比如源文件有好几个目录,有两个makefile,一个是普通的,一个是valgrind用的。编
译的时候先用普通的编译,再把需要用valgrind检查的模块的目标文件删掉,再重新编
译,这样能让valgrind跳过不必检查的模块么?
How about purify? |
|
c*******h 发帖数: 1096 | 2 一个简单的mpi程序
#include
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
MPI_Finalize();
return 0;
}
mpicc编译了之后valgrind一跑就crash
==27777== Memcheck, a memory error detector
==27777== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==27777== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==27777== Command: a.out
==27777==
==27777== Warning: ignored attempt to set SIGRT32 handler in sigaction();
==27777== the SIGRT32 signal is used int... 阅读全帖 |
|
t****t 发帖数: 6806 | 3 valgrind is not a compiler tool
it's runtime
you run your program through valgrind, no matter how you build it |
|
t****t 发帖数: 6806 | 4 很正常, valgrind的机制是simulate 指令, 并且替换malloc/free一类的调用
栈上的不是用malloc分配的, 所以它弄不清楚
换句话说比如
int a[64];
int b;
假设分配时b在a 后面
那CPU要访问a[64]和访问b, 产生的指令是一模一样的, valgrind当然不知道, 因为它
不管源代码 |
|
d****p 发帖数: 685 | 5 There is an issue installing valgrind on SL. I tried the patch but got no
luck.
Anybody succeeded in using it on SL? I appreciate any info. |
|
o****i 发帖数: 1706 | 6 【 以下文字转载自 Linux 讨论区 】
发信人: ouyadi (可乐会捂帮帮众), 信区: Linux
标 题: Valgrind报uninitialized value was created by a heap allocation
发信站: BBS 未名空间站 (Sat Feb 19 12:11:20 2011, 美东)
程序运行正常,可是在测memery leak的时候报上面那个错,具体错误消息如下:
==25663== Conditional jump or move depends on uninitialised value(s)
==25663== at 0x400C9F: add_edge (graph.c:59)
==25663== by 0x40071A: main (main.c:13)
==25663== Uninitialised value was created by a heap allocation
==25663== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==256... 阅读全帖 |
|
c*****e 发帖数: 34 | 7 一个c++写的程序,在valgrind的环境下run没有错误, 如果直接 run 就会出
segmentation fault. 请问有可能是什么原因啊?
谢谢! |
|
g*********s 发帖数: 1782 | 8 试了一下purify和valgrind,下面的code报告结果相同,都是两个越界读,两个越界写
,一个申请未释放。那purify的优势在哪里啊?license挺贵的。
另外那个comment掉的巨型静态数组两个都不报。有什么工具能处理这种情况吗?
trace一个memory crash的bug,搞不定啊。这个crash是在系统的new[]里,看上去是内
存分配表被搞乱了。
#include
#include
#include
int main()
{
long *x = (long*)malloc(10);
x[10] = 100; // invalid write.
long y = x[10]; // invalid read.
long z[10];
long w(10);
z[10] = 100; //static array allocated in stack. no boundary check.
y = z[10]; //no boundary check. |
|
|
o**o 发帖数: 3964 | 10 我也发现valgrind不能发现栈溢出的问题。 |
|
o****i 发帖数: 1706 | 11 【 以下文字转载自 Linux 讨论区 】
发信人: ouyadi (可乐会捂帮帮众), 信区: Linux
标 题: Valgrind报uninitialized value was created by a heap allocation
发信站: BBS 未名空间站 (Sat Feb 19 12:11:20 2011, 美东)
程序运行正常,可是在测memery leak的时候报上面那个错,具体错误消息如下:
==25663== Conditional jump or move depends on uninitialised value(s)
==25663== at 0x400C9F: add_edge (graph.c:59)
==25663== by 0x40071A: main (main.c:13)
==25663== Uninitialised value was created by a heap allocation
==25663== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==256... 阅读全帖 |
|
o****i 发帖数: 1706 | 12 所有报错的地方都是循环语句,类似于
for(vp = *vtxhead; vp != NULL; vp = vp->next){
是不是说最后vp->next是NULL的时候,Valgrind误认为是uninitialized value,如果是这个问题的话,该怎么解决呢? |
|
|
g*********s 发帖数: 1782 | 14 anyone can share his experience?
a memory crash bug. i'm new to valgrind. the only experience is to use it
for mem leak. |
|
g****y 发帖数: 436 | 15 run it through first. and see what valgrind says. |
|
r*********r 发帖数: 3195 | 16 如果是 seg fault, 用 gdb 就很容易找...
如果是 memory leak, valgrind 比较靠谱. |
|
c****e 发帖数: 1453 | 17 en.可能我没说清楚.windbg就是debugger.valgrind是个emulator.valgrind有个缺点是
纯粹runtime的,不能take a trace然后在trace file上做。我还是两年前用过,不知
道现在怎么样。
发信人: thrust (祝阳阳早日康复), 信区: Programming
标 题: Re: Re: 编程语言选择问题
发信站: BBS 未名空间站 (Thu Jan 8 03:01:27 2009), 转信
我相信windbg走的和valgrind不是同一个路子, 功能也不能相比
valgrind基本上是个模拟器, boundschecker还比较接近
可能因为我做硬件, 对模拟器比较熟-_- |
|
b******n 发帖数: 592 | 18 the disadvantage with memory pool makes memory debuging less easier.
for example, valgrind can easily determine errors without customized memory
pool. if you really need a memory pool, make sure you check valgrind
documentation and use proper memory pool management to help valgrind track
memory. |
|
L******3 发帖数: 18 | 19 因为valgrind的memory profiler (memcheck/massif/dhat)无法running under stess
。我们只是在正常负载的情况下跑了一下valgrind一个小时,valgrind没有report任何
definitely lost和invalid read/write,倒是有些possibly lost和directly lost,
但是大体看了下,应该不是原因。 |
|
t****t 发帖数: 6806 | 20 没用过eclipse, 好象内置的就是gdb吧. 那比valgrind差远了. 这种诡异的问题用
valgrind一查一个准.
当然, valgrind跑起来很慢, 但是你的时间比电脑的值钱不是. |
|
c****3 发帖数: 10787 | 21 有些问题扫不出。举个以前碰到的一个crash的例子,有人写的程序用一个unsigned
int变量做memcpy的size。可惜在某些情况,size计算出现0-1=4294967295,他也没有
检查。
出了4294967295,然后一个内存复制,把整个进程内存全部覆盖了。程序是多线程的,
memcpy还没有结束就crash掉了,每次crash的位置完全随机。基本没有机会,crash在
memcpy的地方。
这种情况,只有一行一行读代码,或者用valgrind去检查越界。但是非常不容易重现,
用valgrind不知道要等到啥时候能碰到,加上valgrind本身还有误报。最后只有一行一
行读代码最有效。幸好代码是C写的,还容易找一些。如果代码是C++写的,不知道找到
那天去了。 |
|
c*********t 发帖数: 2921 | 22 写了一个很简单的程序,在linux下试了试,是segmentation fault, 程序退出。并且用
valgrind verify了一下,是同样的结果。
#include
// del_stack_variable.c
// this program tries to delete a variable in a function
//
int main()
{
int j=10;
printf("the addr of j =%p, j = %d\n", &j, j);
printf("delete j \n");
free(&j); //this will cause segmentation fault
printf("after that\n");
printf("the addr of j =%p, j = %d\n", &j, j);
return 0;
}
gcc -o del_stack del_stack_variable.c
$ ./del_stack
the addr of ... 阅读全帖 |
|
f****4 发帖数: 1359 | 23 valgrind没怎么用过,如果我的主程序有while(1),一直在run,valgrind能够实时
report多少memory没释放么?
gdb p pid会把系统暂停的
自己管理mempool的话,如果可以手工释放memory的话,那么你的系统必定已经知道这
些memory是用完没有释放了,那样的话,还要你手工释放做啥? |
|
|
k****f 发帖数: 3794 | 25 用valgrind看看有没有内存错误
把所有的valgrind找到的错误修改好,再去qsub |
|
t****t 发帖数: 6806 | 26 我相信windbg走的和valgrind不是同一个路子, 功能也不能相比
valgrind基本上是个模拟器, boundschecker还比较接近
可能因为我做硬件, 对模拟器比较熟-_-
?
base
extension, |
|
k*****l 发帖数: 177 | 27 一直想试一试这个程序, 主要是写的程序小,简单,一直没有试用valgrind
今天终于试了一把,效果很好。
出错信息很详细:
==29368== Memcheck, a memory error detector.
==29368== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==29368== Using LibVEX rev 1854, a library for dynamic binary translation.
==29368== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==29368== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation
framework.
==29368== Copyright (C) 2000-2007, and GNU GPL'd, by Julian |
|
b***y 发帖数: 2799 | 28 ☆─────────────────────────────────────☆
mrmaoren (我是毛人毛人是我我是毛人毛人是我) 于 (Wed Apr 16 01:18:43 2008) 提到:
请问下面的这段程序,是不是分配的内存再也回不来了?
main()
{
float * p = new float[100];
exit(1);
delete [] p;
}
我原来认为这肯定是memory leak,但是用valgrind检查,说是“still reachable”。
我曾经试着分配过很大的内存作试验,完了用top看内存好象并没有少一大块。
如果没有最后那句delete [] p,valgrind就会说“definitely lost”。两种情况都没
有free内存,难道因为程序里有一句delete,编译器就会产生不同的code,然后系统可
以把内存再拿回来?
☆─────────────────────────────────────☆
mrmaoren (我是毛人毛人是我我是毛人毛人是我) 于 (Wed Apr 16 01:28:35 2 |
|
w***g 发帖数: 5958 | 29 用valgrind测那些位置没有被初始化。花点力气应该能定位出来的。
你在程序里把传进来的struct bar的各个变量的地址都打印出来,然后和valgrind报的
地址对比,就可以知道那些变量没有初始化了。
不过要是服务商有时候初始化有时候又不初始化那就没办法了。 |
|
w*********l 发帖数: 1337 | 30 我胡说的。我没用过。
purify那篇paper是够老的了,valgrind要新很多。我以为现在大家都用valgrind了。 |
|
t*******t 发帖数: 105 | 31 前段时间潜水发现了valgrind这个好东西,用起来还不错,但是实在是太慢了,我的程
序6分钟跑完,valgrind要一个多小时,两倍多的内存消耗,有替代品吗? |
|
|
r*********r 发帖数: 3195 | 33 try valgrind, especially if you doubt there's memory leak.
valgrind basically makes linux the best platform to debug code. |
|
c****x 发帖数: 6601 | 34 用过valgrind,gdb和cmake么?
:你读个野鸡试试,根本用不着。
: |
|
发帖数: 1 | 35 最近在给一个物理仿真写加速的部分 用的汇编
忽略了padding 各种神秘错误
最后用valgrind调试找到root cause |
|
o****p 发帖数: 9785 | 36 得了吧,那些公司的root cert到底是不是还安全,有谁敢说?要不然一个个惶惶不可
终日的赶紧出patch干啥?你一个连data alignment都要靠valgrind才能搞明白的小白
,也好意思跑出来装大牛,我真是呵呵了,这种问题我们写程序的时候就不可能出现。 |
|
o****p 发帖数: 9785 | 37 你说了是你自己写的程序弄出来的问题,不要耍赖,我不可能出这种错误,当然我抓过
别人很多的类似问题,包括我看别人code发现类似问题直接给改掉的很多。endian和
data alignment是网络程序员和kernel程序猿的101,要是出了这么个问题我基本会说
今天我该打自己嘴巴,因为我居然会搞错alignment,你怎么说的?你说板上知道data
padding的人估计不超过三个,还自豪地说你用valgrind发现了这个问题,哈哈哈哈。 |
|
|
|
w*******e 发帖数: 312 | 40 非cs科班出身,这辈子估计只能做test了,之前挂了facebook的sales engr, amazon
OR scientist,只能整越来越矬的职位了
貌似是个ABC mm面的,满嘴的like, like,人比较nice,被我逗的咯咯地笑了好几次。
问的问题比较简单,也没coding啥的
先让自我介绍
what's hashtable? what's binary search tree? what's the diff? in term of
operation efficiency? in term of memory storage?
要记得BST要存pointer啊
一个程序的内存不断增大,为什么会这样,该怎么办?
用valgrind, purify去测漏内存,看memory allocation/release是不是efficient,
blablabla
一个程序有问题,但是debug的时候加了个TRACE这个问题又没了,为什么会这样?
这个我就是结合我目前的项目说,比如有multi-threads的时候,blabla,其实我还真
不知道。debug mode和rel |
|
f****g 发帖数: 313 | 41 Check this link:
www.cs.cmu.edu/afs/cs.cmu.edu/academic/.../mymalloc.c
The main purpose of wrapper function is to track where the memory is to
malloc
and free
And also there are several memory profiling tools which could be used, such
as
Memcheck, Valgrind... :D |
|
|
j********x 发帖数: 2330 | 43 software libraries and tools are available to check memory leaking
check valgrind, for example
performance bottleneck can an anything, virtually any c++ components can
cause performance degradation if used improperly. One of commonly mentioned
problem is the temporary object copying problem, which means temporary
objects are copied many times since function call are pass-by-value. |
|
|
w*********g 发帖数: 723 | 45 应该可以,memory leak detection是个专业的东西,深究起来很多内容,学用
valgrind,继之基本原理就不错了,毕竟工程中间没人让你去钻那么深,能用工具照出
来就不错。也要看问你的人的目的,如果是专业memory leak detection的工具开发,
你当然需要知道很多原理怎么做。 |
|
|
|
t*******i 发帖数: 4960 | 48 这个,还是算了,当时我们的chemical就不怎么对。
我后来发现他问的问题好像大都可以从beginning linux porgramming里面找到答案,
里面谈到用valgrind 诊断 memory leak,我怀疑是不是有工具可以做这个。如果是
java的话,好像可以从虚拟机里得到memory 分配的情况。 |
|
P**********c 发帖数: 3417 | 49 run valgrind这个一般的公司都是会做的。不过这个对自己管理的mempool沒有用。 |
|
d*******d 发帖数: 2050 | 50 可那也是inhouse test用的.
也没可能远程在客户那边不中断程序的情况下run阿.而且valgrind慢死了.
我想的是,suspend那边程序,然后gdb load那个process id,
然后呢?什么叫fix memory leak?手动release memory?如果这里头有自己定义管理的
mempool,且有相应的function到是有可能 |
|