问题标签 [memcheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
485 浏览

fortran - 使用 valgrind memcheck 调试 MPI Fortran 程序时报错

我正在尝试使用 valgrind memcheck 调试我用 Fortran 编写的 MPI 程序。但是,即使我调试了一个最小的 MPI 程序,Memcheck 总是在第一条 MPI 语句 MPI_INIT(IERR) 上报告错误。如果我评论与 MPI 相关的语句,则不会发生错误。

以下是我的最小工作,你能帮忙吗?

主文件:testMPI.for

mympi_env_init.for ```

mympi_env_finish.for

编译命令

在我得到 a.out 后,我​​用 valgrind 检查它,并报告了很多错误

虽然它报告说 MPI_INIT 有一些错误。它认为这一定是我在配置或程序上的错误,而不是 OpenMPI。

你能告诉我如何摆脱这个问题吗?

===valgrind 版本 $ valgrind --version valgrind-3.13.0

== 我的 openmpi 信息

0 投票
1 回答
452 浏览

linux - Valgrind ARM 二进制文件在 ARM926EJ 中不起作用,给出错误未找到

问题:无法在 ARM 中运行 Valgrind 二进制文件。


Valgrind-3-13-0我在 Linux 主机中成功交叉编译。我将二进制文件移至我的 ARM 目标。我用它说的手臂运行 Valgrindnot found.

交叉编译的步骤

在构建过程中,我戳了一下配置文件,将其更改armv7arm.

我也试过这个选项

然后制作并安装。

我看到 Valgrind 位于我的根文件系统中/usr/bin,想知道为什么它说找不到。


这是 Valgrind 交叉编译的最终输出。下面只是我的安装目录的树。


我实际上只将五个文件从/bindir 复制到了我的 target /usr/bin

问题。

我还需要复制整个 lib 目录吗?

我尝试在主机中运行交叉编译的二进制文件

我所期望的是它会抱怨这个体系结构的无效 ELF 图像,因为我为 arm 构建它并在 Linux 上运行它应该这样抱怨,但事实并非如此。

想知道配置标志和 ARCH 吗?

0 投票
3 回答
975 浏览

c - 从 Valgrind 源代码访问用户变量

我正在尝试对 valgrind 源代码进行一些实验。我使用下面的代码作为我的测试代码:

我构建了一个名为“test.out”的可执行文件。然后我执行了以下命令:

在我的测试代码中,我有一个未初始化的错误,并且 valgrind通过给我一些消息来报告来自“ mc_errors.c ”的错误:

现在我想用来自 valgrind 的消息(错误报告)打印“ g_int ”和“ y ”的值。我已经在 valgrind 源打印中添加了一个打印输出:“我想在这里打印我的局部变量!” 是否有任何可能的方法可以使用任何内部 api 从 valgrind 源的用户源代码中读取变量的值?如果我可以从用户代码中获取所有变量名,那将是一个加号。

0 投票
1 回答
2790 浏览

c++ - valgrind memcheck 在“rw-匿名段”中给出消息

我正在使用地块来调试长时间运行的二进制程序的堆增加问题。但它报告:

所以我尝试了 valgrind --tool=memcheck -v,它报告:

我不知道main下面的错误。

0 投票
1 回答
977 浏览

c++ - 使用 valgrind 忽略部分代码 - memcheck

我使用 massif、sgcheck 和 memcheck valgrind 的模块来检查 ac/c++ 项目。我想知道是否可以让 valgrind 忽略部分代码。当我在我的项目上运行它时,我有类似 248 个由 opencv 调用生成的不同“错误”错误。这是正常的,但目前我无法真正避免这个调用,这就是为什么我想让 valgrind 忽略这部分代码。

我尝试通过添加--gen-suppressions=all --log-file=valgrind.out到我的命令行来生成一个文件来“抑制”他的错误,以生成一个文件来忽略错误。但是有一些“手动过程”要做,比如在日志文件中删除 248 bloc,我想避免它。

所以:你知道是否有办法(可能有点像 ifdef 或 ifndef)让 valgrind 忽略一部分代码?

谢谢 !

0 投票
1 回答
2726 浏览

valgrind - “读取调试信息时出现严重错误” - 抑制?忽视?使固定?

我正在使用 valgrind 来尝试定位 C-cum-C++ 程序中违反内存访问的原因。即使避免了这种访问(即当一切正常时),valgrind 告诉我:

我应该如何处理这些警告?我是不是该...

  • 以某种方式修复它们?它在系统库中,而不是在我的代码中;甚至有可能对他们做点什么吗?
  • 以某种方式抑制它们(但不抑制任何真正的错误消息)?
  • 忽略它们——如果我既不能修复也不能压制?

注意:我在 X86_64 机器上使用带有内核 4.13.0-32 的 GNU/Linux Mint 18.4。

0 投票
0 回答
88 浏览

c - 有没有办法在 valgrind memcheck 中命名内存池?

VALGRIND_CREATE_MEMPOOLPostgreSQL 大量使用内存池,并且在启用 Valgrind 时,使用等向 Valgrind 提供有关它们的信息。

结合使用客户端请求的增量泄漏检查VALGRIND_DO_LEAK_CHECKVALGRIND_DO_ADDED_LEAK_CHECK这对于跟踪大型、复杂和长寿命程序中的内存使用情况非常有用。

但是:PostgreSQL 有很多缓存,它们的生命周期往往跨越事务等典型边界。此类缓存中的内存似乎泄漏(由于各种原因)通常很好,但并不总是容易识别此类内存是否仅使用堆栈在缓存上下文中分配。

所以我正在寻找一种在泄漏报告中显示内存池名称并在抑制中过滤它们的方法。理想情况下像

或在泄漏报告中,如下所示:

我怀疑答案是否定的,因为注册 Valgrind 内存池的界面似乎没有提及名称。PostgreSQL 的内存池在其标题块中嵌入了名称,因此只需教 Valgrind 什么字节范围是池名称即可。

我错过了什么还是现在不可能?

一个可行的替代方案可能是程序回调来过滤泄漏检查报告或向它们添加注释信息。但我再次在 Valgrind 中看不到任何表明这是可能的东西。

这似乎是其他人想要的东西,所以也许我只是没有看到这样做的方法。

上下文:我怀疑某个分配应该在缓存中,但它是在 PostgreSQL 中分配的TopMemoryContext。所以它的寿命超过了它应该被销毁的缓存。

0 投票
1 回答
491 浏览

qt - 为什么 valgrind 会产生多个(几乎)相似的泄漏摘要?

我从控制台运行valgrind 3.12.0 版,如下所示:

valgrind --log-file="valgrind.log" --leak-check=yes ./application -param

日志似乎在应用程序运行时被污染,这已经很有趣了,因为我认为在应用程序仍在运行时不能 100% 确定地检测到内存泄漏。我猜在某些情况下(可能是线程)这是不正确的,valgrind 足够聪明,可以在早期抓住那些?

真正困扰我的是,有多个“泄漏摘要”包含或多或少相同的信息。在我看来,后期记录的摘要包含更多信息。

您将在下面找到在我的Qt 应用程序上执行的 valgrind 的输出。我用记事本列出了所有“肯定”丢失的条目。您可以看到有大量的泄漏摘要,我不知道为什么包含的信息几乎相同。尤其是从QApplication的构造函数中泄露出来的 15 个字节非常奇怪,因为它一次又一次地包含在每个摘要中。valgrind 如何决定何时创建这样的摘要?

在此处输入图像描述

0 投票
0 回答
52 浏览

cuda - 如果在内核中使用 double,则 cuda 比赛检查错误

我是 cuda 编码的新手,最近我在编码时遇到了一个 matchcheck 错误,这是我可以重复错误的非常简化的代码:(在 Linux 和 Windows 上测试)

然后编译代码: nvcc -G -g test.cu -o test

然后使用以下命令测试代码: cuda-memcheck --tool racecheck test

我收到如下错误: ========= 错误:在 test.cu:14:kernel(void) ========= 的 0x00000350 处的写入访问和在 0x00000350 的写入访问之间报告了竞争test.cu:14:kernel(void) [1098 危险]

如果重复运行,此错误可能由第 14,15 或 16 行随机触发。如果我执行以下列表中的任何操作,则可以删除该错误:

  1. 删除“cudaDeviceReset()”
  2. 将块中的线程数减少几个线程,例如 (16, 32)
  3. 将所有变量类型从“double”更改为“float”
  4. 从代码中删除变量“s1”、“s2”和“s3”

这真的让我很困惑,并导致我有一个幼稚的问题,每个线程都试图执行内核函数中的每个句子吗?谢谢!

0 投票
0 回答
221 浏览

c++ - 使用 valgrind 仍然可以访问分配的内存

我正在为几周后开始的面向对象课程做准备,但是我在解除分配内存的概念上遇到了麻烦。现在我只是将内存分配给堆栈的第一个节点,然后尝试释放它。如果有人可以帮助我找到我的析构函数做错了什么,将不胜感激。提前致谢!

我从 valgrind memcheck 得到的输出是:

代码:

编辑:我已经完成了我的 AddNode 课程。我仍然有类似的问题,但现在有两个内存泄漏(在 main 中对 AddNode 的两个调用)。

编辑:使用 C++ 6.3.0 版和 valgrind 3.13.0 版