【问题标题】:What do the number of contexts in valgrind leak summary refer to?valgrind泄漏摘要中的上下文数量指的是什么?
【发布时间】:2016-03-19 21:05:23
【问题描述】:

我正在使用 valgrind 分析一个 c++ 应用程序。在泄漏摘要中,错误的数量与上下文的数量不同。上下文是什么意思?

`ERROR SUMMARY: 44911 errors from 1070 contexts (suppressed: 0 from 0)`

为什么在这种情况下错误数与上下文数不同?

【问题讨论】:

  • "我正在分析一个 c++" - 这意味着你不应该添加 C 标记。
  • 好的。知道了。它现在似乎被删除了

标签: c++ memory-leaks valgrind memcheck


【解决方案1】:

context 是指导致错误的调用堆栈。 简而言之:代码中的许多地方都会导致错误。

【讨论】:

  • 好的。没错。那么,知道错误的数量是什么意思吗?
  • 如果一个错误位置被多次执行,您将遇到多个错误。考虑一个只有一个错误位置的情况,它被执行了 10 次,你会遇到“来自 1 个上下文的 10 个错误”
【解决方案2】:

这是上下文错误的定义:

错误的 (...) 上下文是导致(或可能导致)错误的函数调用链。

查看错误摘要中的此示例:

这里有两个错误上下文:

所以,回答你的问题,上下文的数量是指检测到问题的函数的数量。

在上面的示例中,您应该自下而上读取每个上下文错误,并且您可以确定两个上下文错误都发生在 strconk 文件的第 100 行和第 102 行中.

还请注意,对于每个上下文错误,在地址部分中,它会显示该错误在内存中发生的位置的描述,“大小为 6 的块后的 0 个字节”。这是一个很好的线索,可以准确地识别是什么给你带来了麻烦。

有关 Valdrind 工作原理的详细信息,请参阅:https://valgrind.org/docs/manual/manual-core.html

希望对您有所帮助!

【讨论】:

  • 当我有 50 个“上下文”但我的日志只显示 45 个时,这意味着什么。所以最后一行是上下文 45 of 50 中的 X 错误。最后五个发生了什么?最后一行是 ERROR Summary: xxx errors from 50 contexts (suppressed: 0 from 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多