【问题标题】:can I specify how I want the output in valgrind?我可以指定我想要如何在 valgrind 中输出吗?
【发布时间】:2021-02-04 05:57:12
【问题描述】:

我正在开发一个非常大的 c 程序,并试图找出其中的内存泄漏。我从 valgrind 得到的输出非常庞大,大约 80000 行(包含所有类型的错误),很难逐行检查。 我想要的是只有在肯定丢失或可能丢失泄漏并且没有其他错误时才能获得 valgrind 的输出,以便我可以通过关注这两个错误来纠正问题。请问有可能吗?

【问题讨论】:

  • 所有来自 valgrind 的错误都是错误。从头开始,修复它然后继续。
  • 当然,这就是我现在正在做的事情。但是,如果有一种方法可以让我控制输出的显示方式。
  • 显然手册页也太大而无法阅读。但您可能想看看--show-leak-kinds。您的实际问题是您似乎没有构建和测试环境。也许看看 ValgrindCI 以获得一些灵感。
  • 如果只想查看泄漏错误,可以使用 --undef-value-errors=no 禁用某些错误。您还可以做的是拥有一个抑制文件来抑制您不想处理的错误。抑制条目应该与条目中给出的错误类型的任何堆栈跟踪相匹配。但正如第一条评论中提到的,默认情况下所有错误都应该被分析和修复。
  • 就像我在许多文件中有代码一样,在 src 目录中我还有 3 个其他目录,即 common、vcom、包含许多 c 文件的代码。如果我只想要常见文件中的错误。这可能吗?(我想我可以使用抑制,但我以前从未使用过它们并且无法得到一个想法,所以请告诉如果可能)

标签: c valgrind


【解决方案1】:

正如 cmets 中提到的,有很多选项可以控制输出。您可能需要考虑在某种 GUI 中运行 Valgrind,如果这样可以更轻松地处理错误。 Qt Creator 和 Valkyrie 浮现在脑海中(我没有使用 Valkyrie 的经验)。您可能还需要考虑 xml 输出或 xtree 格式(用于 kcachegrind)。

--show-leak-kinds=definite 开始,逐步解决错误。以我的经验,除非代码系统性不好,否则您会发现仅修复少量错误将大大减少 Valgrind 报告的错误数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2012-04-29
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多