问题标签 [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 投票
1 回答
369 浏览

valgrind - 如何启动 valgrind 以使用非 root 帐户检查一个应用程序

如何启动 valgrind 以检查具有非 root 帐户的应用程序?

我有一个应用程序,它只能通过以下方式开始:

我想用 valgrind 做 memcheck。

它无法启动应用程序。

0 投票
1 回答
691 浏览

c - Valgrind 未显示有关内存区域重叠的错误

在使用Valgrind(或者具体来说,Memcheck )测试各种动态内存相关错误的过程中,我遇到了一种情况,我故意创建内存重叠,但是 Valgrind/memcheck 没有错误报告. 以下是使用的代码。请分享我所缺少的。

汇编

样品运行和输出

实际上没有关于内存区域重叠的信息。根据 Valgrind 手册,它应该显示如下:

我的案例中缺少什么?

系统信息:

0 投票
1 回答
69 浏览

c - 未初始化的值 - if_nan 函数

我有一个调用以下函数的代码

if_nan()在计算中会遇到to find 。当我使用 Valgrind 进行 memcheck 时,出现以下错误:

我不明白这里要初始化什么值。请提出一种避免此错误的方法。谢谢你

0 投票
0 回答
1960 浏览

memory-management - Valgrind - 程序崩溃

我是新手valgrind。在尝试检查我的小程序时,我收到了这个错误:

由于内存访问不正确,这种错误是 AFAIK。库正在尝试访问未映射到其内存空间中的内存区域。

没有valgrind检查整个程序就停止了吗?或者这是否意味着我的应用程序没问题?如何解决现有问题?

0 投票
1 回答
478 浏览

c++ - OOM 时不会崩溃的内存泄漏,或出现在地块/valgrind 中

我有一个内部 C++ 应用程序,它会无限增长——以至于我们不得不实现一旦 RSS 达到某个峰值大小 (2.0G) 时实际上会杀死它的逻辑,只是为了保持某种秩序。但是,这显示了一些奇怪的行为。

首先,我通过 Valgrind w/memcheck 运行应用程序,并修复了一些随机内存泄漏。但是,这些内存泄漏的程度以 10 兆字节为单位。这是有道理的,因为可能没有实际的内存泄漏——这可能只是应用程序端的内存管理不善。

接下来,我使用 Valgrind w/massif 来检查内存的去向,这就是它变得奇怪的地方。峰值快照为 161M——与我们使用 RSS 字段看到的 1.9G+ 峰值相差甚远。最大的消耗是我所期望的——在 std::string 中——但这并不异常。

最后,这是最令人费解的——在我们意识到这个内存泄漏之前,我实际上是在 AWS 上测试这个服务,只是为了好玩,在 CC2.8XL 机器上将工作人员的数量设置为一个很高的数字,44工人。那是 60.5G 的 RAM,没有交换。快进一个月:我去看主机——低头看,它的内存已经用完了——但是!这些进程仍然运行良好,并且卡在内存使用的不同阶段——几乎均匀分布在 800M 到 1.9G 之间。每隔一段时间就会dmesg打印出关于无法分配内存的 Xen 错误,但除此之外,进程永远不会死亡并继续积极处理(即,它们没有“卡住”)。

我在这里缺少什么吗?它基本上可以工作,但对于我的生活,我不知道为什么。关于下一步要寻找什么,有什么好的建议?有什么工具可以帮助我弄清楚吗?

0 投票
1 回答
124 浏览

c - C - Valgrind 在我的反向字符串函数中检测到错误

我写了一个看起来运行良好的小程序,但是当我运行 memcheck 时,valgrind 给了我一个奇怪的错误。我需要帮助来解释错误代码:)

valgrind 输出如下:

我还注意到,如果我使用 calloc() 而不是 malloc(),valgrind 根本不会检测到任何错误。

注意:我写 get_length() 函数只是为了好玩,哈哈

0 投票
1 回答
425 浏览

java - 防止 valgrind 跟踪使用 execvp 创建的任何 java 子进程

我有一个 C 程序,我在其中execvp调用java如下:

Wherepath_to_java="/usr/java/latest/jre/bin/java"args包含指向jar我正在运行的链接。我知道它正在工作 - 我只想分析 C 部分。

我正在尝试使用此命令对其运行 memcheck 以避免分析java子进程,同时分析所有其他子进程:

但是,除其他问题外,我在以下内容中看到LOGFILE

我也试过--trace-children-skip=java了,这并没有导致“不匹配”错误,但它完全无法阻止valgrind进入java子流程。

我这样做的原因是我不在乎分析java子进程,特别是因为valgrindJVM 不能很好地发挥作用。例如:

哎呀。我究竟做错了什么?

0 投票
1 回答
9484 浏览

c - 在 C 程序中跟踪数组越界访问/写入的推荐方法

考虑用 C 编写一些不太明显的算法的实现。例如,让它成为递归快速排序,我在 KN King 的“C Programming: A Modern Approach, 2nd Edition”一书中找到了它,可以从这里获得。最有趣的部分包括以下两个定义:

两个while循环都可以通过删除low < high测试来优化:

确保每次访问或写入数组(在堆栈上分配)实际上是有效的(即不会引发未定义的行为)的推荐方法是什么?我已经尝试过的是:

  • 手动调试gdb一些实际数据
  • 将源代码传递给静态分析工具,例如splitcppcheck
  • valgrind--tool=exp-sgcheck开关

例如有五个元素数组{8, 1, 2, 3, 4}

结果是(当然它依赖于实现):

1. GDB

如您所见,low变量超出了边界:

2.静态分析工具

3. Valgrind 与--tool=exp-sgcheck

该位置at 0x4005A0: split (qsort.c:46)与我gdb手动找到的位置匹配。

0 投票
1 回答
398 浏览

python - 为什么 Python 子进程本地的对象分配会增加 main 的堆大小?

TL;博士

根据 Valgrind 的 memcheck 工具,如果我在函数中分配一个大的局部变量并使用 启动该函数multiprocessing.Pool().apply_async(),则子进程和主进程的堆大小都会增加。为什么 main 的堆大小会增加?

背景

我正在与一个多处理工作人员池一起工作,每个工作人员都将处理来自输入文件的大量数据。我想看看我的内存占用如何根据输入文件的大小进行缩放。为此,我在 Valgrind 下使用 memcheck 和此 SO answer中描述的技术运行我的脚本。(从那以后我了解到 Valgrind 的 Massif 工具更适合这个,所以我将使用它来代替。)

memcheck 输出中有一些看起来很奇怪的东西,我想帮助理解。

我在 Red Hat Linux 上使用 CPython 2.7.6,并像这样运行 memcheck:

valgrind --tool=memcheck --suppressions=./valgrind-python.supp python test.py

代码和输出

堆摘要(每个进程一个):

总堆使用量:45,193 分配,32,392 释放,7,221,910 字节分配
总堆使用:44,832 分配,22,006 释放,7,181,635 字节分配

如果我将tmp = 'a'*1行更改为tmp = 'a'*10000000我得到这些摘要:

总堆使用量:44,835 次分配,22,009 次释放,分配 27,181,763 字节
总堆使用量:45,195 次分配,32,394 次释放,分配 17,221,998 字节

问题

为什么两个进程的堆大小都会增加?我知道对象的空间是在堆上分配的,因此较大的堆对于其中一个进程当然是有意义的。但是我希望子进程拥有自己的堆、堆栈和解释器实例,所以我不明白为什么在子进程中分配的局部变量也会增加主进程的堆大小。如果它们共享同一个堆,那么 CPython 是否实现了自己的 fork() 版本,它不会为子进程分配唯一的堆空间?

0 投票
4 回答
7850 浏览

c++ - 大小为 8 的无效读取,大小为 8 的无效写入 (Valgrind)

今天晚上我一直在玩下面的代码几个小时,我只是在摸不着头脑。

使用函数从标准输入填充数组时,我不断收到“大小为 8 的无效写入”和“大小为 8 的无效读取”。

任何帮助将不胜感激......我知道 Stack Overflow 上有很多这样的错误,但其中大多数是这种情况所特有的。

Memcheck 的错误如下:

我已将问题缩小到以下两行,10 个写入错误和 10 个读取错误:

任何见解将不胜感激!