1

我有一个 C++ 可执行文件,当我使用以下命令运行此二进制文件时

valgrind -v --leak-check=full --show-reachable=yes --track-origins=yes mybinary -mode init > 5.log 2>&1

它以 0 退出,并生成所有输出文件。

但是当我像这样运行这个二进制文件时

mybinary -mode init > 5.log 2>&1

它是许多地方的核心倾销(一个接一个地)。

为什么当我使用 valgrind 运行时行为会发生变化?valgrind 是否设置任何内部环境变量?

4

1 回答 1

1

正如 Valgrind 手册所说

Valgrind 将执行序列化,以便一次只运行一个(内核)线程。[...] 你的程序在 Valgrind 上运行时会看到与正常运行时非常不同的调度。这既是因为 Valgrind 正在序列化线程,也是因为代码运行速度比正常慢得多。

此外,您正在运行默认的 Valgrind 工具 memcheck。您可以尝试使用任何以线程为中心的工具,例如 helgrind 或 DRD,以获得有关并发问题的特定信息。

于 2016-03-19T17:27:37.410 回答