问题标签 [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.
false-positive - Memcheck 在访问堆栈中的局部变量时报告未初始化的值
我遇到了 Memcheck 报告未初始化值的问题,我认为这些是完全合法的。我设法创建了一个展示这种行为的小示例程序。我想知道 Memcheck 是否真的错了,可以做些什么。(除了将错误添加到抑制文件中之外,还有其他解决方案吗?)
为了重现这一点,我制作了下面的程序。它运行go
放入0x42
堆栈的函数,调用og
(这会将下一条指令的地址压leave
入堆栈),然后og
将其存储esp+4
到全局变量a
中。
堆栈如下所示:
如果我构建它并运行 Valgrind,
Valgrind 认为变量中的值pc
(answer
如果你把它放在里面if
)是未定义的。我用调试器检查了那里的值实际上是我想要的。
如果我从 Valgrind 调试--vgdb-error=0
并打印定义,它表示所有位都是未定义的。
0xfea5e4a8 处的值为
和
主程序
去.S
java - 使用 JCuda 包装器使用 memcheck 调试 CUDA
我正在开发一个使用 JCuda 的图像分割程序。该项目是一个 Maven 项目,但是 JCuda 的依赖项存储在 dll 文件中,并且不使用 maven 进行管理。由于我在由 Jcuda 调用的 Cuda 内核 (*.ptx) 中遇到运行时错误,因此我想开始调试,使用 Cuda 的 Java 包装器相对困难。因此,我想使用“memcheck”,它需要一个 *.bat 文件来调用我的 Java 程序。这是我迷路的地方。我没有设法创建一个可运行的 jar 文件,我可以在我的 *.bat 文件中使用 java 命令运行它。我的问题是,有没有另一种方法可以调试我的 Cuda 代码,但不创建可运行的 jar 文件?- 如果没有,我如何从 maven 创建一个可运行的 jar 文件?
我知道其他人也有这个问题,但没有答案对我有用,这让我怀疑 dll 文件与它有关。我试图用 maven 打包项目(maven built... -> 目标:包)。当我通过命令提示符导航到创建 jar 文件的目标目录时,程序不会运行:
回复意味着找不到主要清单属性。这是我的 pom 文件的快照,它应该定义主类:
谢谢您的帮助。这是我在这里关于堆栈溢出的第一篇文章,所以请指出我的问题中的不一致之处。
c++ - valgrind泄漏摘要中的上下文数量指的是什么?
我正在使用 valgrind 分析一个 c++ 应用程序。在泄漏摘要中,错误的数量与上下文的数量不同。上下文是什么意思?
在这种情况下,为什么错误的数量与上下文的数量不同?
memory - 使用共享缓冲区进行模拟内存分配的 Cuda 问题
我正在将一个程序从一个常规的 c 程序转换为一个 cuda 程序,并希望为只使用一个大池的 malloc 实现一个简单的包装器。
我有 5000 个线程。我的块大小是 1024。
这是我用来跟踪每个线程内存池的缓冲区结构。
你可以想象我使用:
进行分配,假设每个线程在其 262144 字节上创建一个缓冲区
以下是我用来进行分配的函数:
每个线程调用:
所以当我运行代码时,它只是在某个时候从内核返回。当我运行调试器时,出现此错误:
当我运行 memcheck 时,我在几个块中得到了几个这样的错误:
非常感谢任何帮助我已经为此苦苦挣扎了一段时间
arm - 带有 Valgrind 的 ARMv5:非法指令
感谢这里的其他帖子,我设法为 ARM 构建和安装 Valgrind:
并将其复制到 ARMv5 机器上的相同路径中。
我正在运行 ARMv5,显然 Valgrind 仍然不支持 ARMv5。
启动 Valgrind 时,我会得到
我想这是因为 Valgrind 需要 ARMv7 指令集?
所以:
- 交叉编译 valgrind 时,我在配置中犯了任何错误吗?
- 有什么方法可以让 Valgrind 在 ARMv5 上启动并运行,甚至只有 Valgrind 中包含的 vgdb 或 Memcheck 工具?
有没有其他工具可以在 ARMv5 上进行内存检查,我听说过
- 地址消毒剂或
- Malloc_Check
它们是否可用于 ARMv5?
非常感谢您的帮助和支持!布鲁弗洛里安
我创建了一个核心转储并运行 gdb,不幸的是没有调试符号:
我应该使用什么命令?
c++ - 如何在没有 valgrind 错误的情况下释放列表中间的已删除节点?
这是一个小测试,可以帮助演示和查看 valgrind 的 memcheck 的输出。有人可以帮我弄清楚如何从列表中间删除和释放一个节点吗?如果我从删除节点部分注释掉 free(cur) 和 free(cur->lock),那么 memcheck 会告诉我有内存泄漏,但是如果我将它们保留在那里,那么我在顶部进行了无效读取循环。有没有办法摆脱这个难题?
xml - valgrind 日志文件中缺少泄漏摘要
我正在对我的软件进行一些内存分析,并在使用 valgrind 的以下命令运行标准内存泄漏检查之后
我得到以下摘要:
==12550== 泄漏摘要:
==12550== 肯定丢失:7 个块中的 597,170 个字节
==12550== 间接丢失:10 个块中的 120 个字节
==12550== 可能丢失:1,455 个块中的 770,281 个字节
==12550== 仍然可达:2,319 个块中的 181,189 个字节
==12550== 抑制:0 个块中的 0 个字节
==12550== 未显示可达块(找到指针的块)。
==12550== 要查看它们,请重新运行: --leak-check=full --show-reachable=yes
==12550==
==12550== 对于检测到和抑制的错误计数,重新运行:-v
==12550== 错误摘要:来自 325 个上下文的 325 个错误(抑制:来自 11 个的 176 个)
但我想得到 xml 格式的结果。所以我使用 valgrind 的以下命令执行了内存泄漏检查,
到这里这条命令执行成功了。但我注意到的是,xml 输出不包含LEAK SUMMARY
之前的类似内容。
所以我想知道有什么办法可以生成 xml 格式的泄漏摘要。
谢谢
fortran - Fortran90 valgrind 输出帮助。代码执行开始时发生无法解释的错误
作为我研究的一部分,我目前正在为 Fortran90 中的一个讨厌的偏微分方程编写一个大型非线性求解器。我遇到了一个问题,我认为内存损坏问题困扰着我的代码,我正在尝试追踪它;为此,我选择使用 valgrind,因为这在过去对我有用。不幸的是,我在代码执行开始时收到一条无法解释的错误消息,请参见下文:
我通过运行我的代码得到了这个错误valgrind --track-origins=yes ./JFNKsolver
。
现在我知道,通常,这些错误意味着在某处使用了一个未初始化的变量,但奇怪的是它出现在我的代码中真正发生任何事情之前,它指向by 0x65BA69: MAIN__ (JFNKsolver.f90:146)
一个测试打印语句,即print *, "Test"
在下面的代码。
请注意,我删除了注释以清理它,并且类型变量在 modelparams 模块中初始化。任何人都可以提供一些可能导致这种情况的见解吗?use
它可以通过语句链接到我正在使用的模块吗?我最初认为这是 valgrind 的问题,但现在我看到了内存损坏的影响,而且这是我看到的唯一错误,我已经开始警惕了。
注意:我认为存在内存损坏问题的原因是因为我看到求解器的行为发生了变化,只是因为存在不应该改变任何东西的代码。这是我为帮助验证代码而添加的一项功能,我对此进行了广泛的测试。
c++ - C ++ - Valgrind:大小为1的无效写入
我有一个带有字符串键的 AVL 树和我自己的 String 类。为了解决另一个问题,我不得不向 String 添加一个复制构造函数。但是,valgrind 报告了一个错误。这是构造函数:
这是向我的 AVL 树添加字符串键后 Valgrind 输出的一部分:
Valgrind 报告的其他错误也可以追溯到operator new[]
. String::String(String const&)
但它有什么问题呢?以及如何重写构造函数以避免此错误?
c - Valgrind memcheck 大小为 1 的无效读取
此示例可以编译并按预期工作。
我重新实现了 memcpy 以完全控制测试,使其独立于底层 libc。如您所见,valgrind 抱怨以下警告:
我不明白为什么会出现这个“invalid read of size 1”消息。这对我来说完全没有意义。你们中的一些人能解释一下这段代码有什么问题吗?先感谢您!