标签: valgrind

如何使用callgrind只分析一段时间的程序执行?

我想使用valgrind进行一些分析,因为它不需要重新构建程序.(我要配置的程序已经使用"-g"构建)

但是valgrind(callgrind)很慢......所以这就是我要做的事情:

  1. 启动服务器(我想配置该服务器)
  2. 一种附加到该服务器
  3. 在服务器上执行某些操作之前,请先开始收集配置文件数据
  4. 操作完成后,结束收集配置文件数据
  5. 分析分析数据.

我可以在Solaris上使用sun studio来做这种事情.(使用dbx).我只想知道是否可以使用valgrind(callgrind)做同样的事情?

谢谢

profiling valgrind callgrind

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

使用pthread_create时valgrind内存泄漏错误

我正在使用pthread库编写程序.当我用命令valgrind --leak-check = full运行我的程序时,我得到以下错误描述:

==11784==  
==11784== **HEAP SUMMARY:**  
==11784==     in use at exit: 4,952 bytes in 18 blocks  
==11784==   total heap usage: 1,059 allocs, 1,041 frees, 51,864 bytes allocated  
==11784==  
==11784== **288 bytes** in 1 blocks are possibly lost in loss record 2 of 3  
==11784==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)  
==11784==    by 0x4010D2E: _dl_allocate_tls (dl-tls.c:300)  
==11784==    by 0x55DC218: **pthread_create**@@GLIBC_2.2.5 (allocatestack.c:570)  
==11784==    by 0x401BC0: initdevice(char*) (in /a/fr-01/vol/home/stud/lim/workspace  /Ex3/l)  
==11784==    by 0x406D05: main (in /a/fr-01/vol/home/stud/lim/workspace/Ex3/l)  
==11784==  
==11784== **4,608 bytes** in 16 blocks …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memory-leaks pthreads

20
推荐指数
3
解决办法
2万
查看次数

valgrind可以和Cygwin一起使用吗?

我正在使用Cygwin在Windows上构建源代码,我需要找到内存泄漏和可能的内存泄漏的地方.我知道Valgrind在Linux中用于内存泄漏检测.

  • Valgrind可以与Cygwin一起使用,以便它可以在基于Windows的环境中使用吗?
  • 如果是,请告诉您需要哪些配置等?

c cygwin valgrind

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

在Kcachegrind中打开perf.data

我在某处读到可以将perf.data(从Linux perf record分析工具输出)转换为kcachegrind可以解析/绘制的格式,但是我没有找到能够执行此转换的应用程序,并且kcachegrind也没有打开perf.data.

这是可能的:使用kcachegrind查看perf输出?我可以使用哪种工具?

linux performance profiling valgrind perf

20
推荐指数
1
解决办法
3154
查看次数

如何获取脚本是否valgrind发现内存泄漏?

我在bash脚本中运行valgrind,并将valgrind的输出定向到一个文件.像这样 :

valgrind --leak-check=full --show-reachable=yes --xml=yes --xml-file=unit_tests_valgrind.out.xml ./unit_tests_runner
Run Code Online (Sandbox Code Playgroud)

RET_VALUE=$?打算把程序(以上unit_tests_runner)的返回值,而不是从Valgrind的.检查valgrind是否发现内存问题的唯一方法是打开日志.

有没有办法检查脚本是否有内存问题?如果有,怎么样?

linux bash valgrind

20
推荐指数
1
解决办法
5947
查看次数

MIPS上的Valgrind报告没有堆使用情况

我正在使用valgrind(v3.10.0)来寻找复杂应用程序(一个经过大量修改的net-snmp版本)中的内存泄漏,该应用程序是作为更大的软件套件的一部分构建的.我确信存在泄漏(应用程序的内存占用量无限制地线性增长),但valgrind总是在终止时报告以下内容.

==1139== HEAP SUMMARY:
==1139==     in use at exit: 0 bytes in 0 blocks
==1139==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==1139== 
==1139== All heap blocks were freed -- no leaks are possible
Run Code Online (Sandbox Code Playgroud)

总堆的使用不能为零-还有很多,很多电话mallocfree整个应用程序.Valgrind仍然能够找到"无效写入"错误.

正在编译该应用程序以及其他软件包,其中MIPS处理器的uclibc-gcc工具链(uclibc v0.9.29)将被闪存到运行busybox(v1.17.2)linux shell的嵌入式设备上.我正在设备上直接运行valgrind.我在启动Valgrind时使用以下选项:

--tool=memcheck --leak-check=full --undef-value-errors=no --trace-children=yes
Run Code Online (Sandbox Code Playgroud)

基本上,即使我使用了堆,Valgrind也没有检测到任何堆使用情况.为什么会这样?我的任何假设(下面)都是错误的吗?


我试过的

简单的测试程序

我从Valgrind 快速入门教程编译了简单的测试程序(使用与上面的应用程序相同的目标和工具链),以查看Valgrind是否会检测到泄漏.最终输出与上面相同:没有堆使用.

链接问题?

Valgrind文档在他们的FAQ上有如下说明:

如果您的程序是静态链接的,那么大多数Valgrind工具只有在能够用自己的版本替换某些功能(例如malloc)时才能正常工作.默认情况下,不替换静态链接的malloc函数.一个关键的指标是,如果Memcheck说"所有堆块都被释放 - 没有泄漏是可能的".

上面的声音与我的问题完全一样,所以我检查它是否动态链接到包含malloc和的C库free.我使用了uclibc工具链的自定义ldd可执行文件(我不能使用原生linuxldd),输出包括以下几行:

libc.so.0 => not found (0x00000000) …
Run Code Online (Sandbox Code Playgroud)

c valgrind memory-leaks memory-management mips

20
推荐指数
2
解决办法
1345
查看次数

如何将valgrind测试添加到我的cmake"test"目标中

我通过构建,ninja然后ninja test从我的构建树运行来运行单元测试:

cmake -G Ninja /source/tree
ninja
ninja test
Run Code Online (Sandbox Code Playgroud)

但是,要运行valgrind,我需要手动运行它:

valgrind rel/path/to/test
Run Code Online (Sandbox Code Playgroud)

我想valgrind在跑步时自动跑步ninja test.根据cmake文档 "设置[valgrind测试] 非常容易 ",但是当我运行时

ctest -D NightlyMemoryCheck
Run Code Online (Sandbox Code Playgroud)

我刚收到这个错误:

Cannot find file: /home/arman/tinman/deb/DartConfiguration.tcl
   Site: 
   Build name: (empty)
WARNING: No nightly start time found please set in CTestConfig.cmake or DartConfig.cmake
Problem initializing the dashboard.
Run Code Online (Sandbox Code Playgroud)

当我遵循此SO问题的说明时,我收到类似的错误:

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

我不知道是什么dart,但根据网站它是某种在线测试doodad.

对我来说,显然非常容易.有谁知道一个解决方案,使超级容易,你就必须是某种IT术士,使它的不是工作?

c++ valgrind cmake

20
推荐指数
1
解决办法
8026
查看次数

Valgrind是否存在已知的误报问题?

Valgrind是否有任何已知的误报?我得到一个'条件跳转或移动取决于fmemopen函数的未初始化值' ,用C语言编写并用GCC编译.我能确定这是真的吗?

编辑:抑制文件中是否存在已知问题?在程序中是否可以做一些事情,这不是真正的错误,但Valgrind会说它们是?如果存在已知问题,列表会很好.

c debugging gcc profiling valgrind

19
推荐指数
1
解决办法
6156
查看次数

Valgrind和Java

我想使用Valgrind 3.7.0在我的Java本机代码中查找内存泄漏.我正在使用jdk1.6.0._29.

为此,我必须设置--trace-children = yes标志.设置该标志,我不再可以在任何java应用程序上运行valgrind,甚至可以执行以下命令:

valgrind --trace-children=yes --smc-check=all java -version
Run Code Online (Sandbox Code Playgroud)

将收到错误消息:

   Error occurred during initialization of VM
   Unknown x64 processor: SSE2 not supported
Run Code Online (Sandbox Code Playgroud)

我已经看过这个链接:https://bugs.kde.org/show_bug.cgi?id = 249943,但它没用.

没有Valgrind或没有--trace-children标志运行程序就可以了.

有谁知道我能做什么?

java java-native-interface valgrind memory-leaks sse2

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

如何从Valgrind获得完整的调用堆栈?

我使用以下参数运行Valgrind:

--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes
Run Code Online (Sandbox Code Playgroud)

在内存泄漏日志中,我看到一些错误消息,完整堆栈跟踪到main,但有些消息如下所示:

==3956== 1,999,140 (68,796 direct, 1,930,344 indirect) bytes in 5,733 blocks are definitely lost in loss record 8,842 of 8,845
==3956==    at 0x4022AB8: malloc (vg_replace_malloc.c:207)
==3956== 
Run Code Online (Sandbox Code Playgroud)

如何获得这些错误的完整堆栈跟踪?

callstack valgrind memory-leaks

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