从现有的 Valgrind 报告创建抑制文件
Creating Suppression File from Existing Valgrind Report
创建 valgrind 报告的最简单方法是 运行 使用命令 --gen-suppressions=all
valgrind。
但我们仍然必须 运行 至少测试一次。在我的情况下,单个 valgrind 测试花费的时间太长,并且由于我之前已经有一个 运行 valgrind 报告,该报告是 运行 而没有 --gen-suppressions=all
命令,有没有办法从中获取抑制命令那个报告?
当然可以,但是如果 Valgrind 为您生成,那将会容易得多。如果您没有太多要添加的抑制,我只建议您试试这个。
描述格式 here。看起来像这样
{
description, preferably unique
Memcheck:[error type]
callstack 1
callstack 2
etc
}
如果您想手动完成这一切,您将需要计算出从详细日志描述到简洁抑制名称的所有映射。例如
Conditional jump or move depends on uninitialised value(s)
对应
Memcheck:Cond
接下来是调用堆栈,如果您只有一个应用程序(没有动态库)并且它是使用调试信息编译的,那么您的生活会更轻松。你需要锻炼
- 使用 'fun'
的函数的错位名称
- 如果没有函数名,则动态库使用'obj'
- 如果你的 exe 被剥离,那么我认为你必须使用十六进制地址
您可能还想使用通配符。 '*' 匹配路径组件并且...匹配调用堆栈深度中的任何内容。例如
乐趣:foo
...
fun:bar
这将匹配 foo 和 bar 之间任意数量的调用级别。
创建 valgrind 报告的最简单方法是 运行 使用命令 --gen-suppressions=all
valgrind。
但我们仍然必须 运行 至少测试一次。在我的情况下,单个 valgrind 测试花费的时间太长,并且由于我之前已经有一个 运行 valgrind 报告,该报告是 运行 而没有 --gen-suppressions=all
命令,有没有办法从中获取抑制命令那个报告?
当然可以,但是如果 Valgrind 为您生成,那将会容易得多。如果您没有太多要添加的抑制,我只建议您试试这个。
描述格式 here。看起来像这样
{
description, preferably unique
Memcheck:[error type]
callstack 1
callstack 2
etc
}
如果您想手动完成这一切,您将需要计算出从详细日志描述到简洁抑制名称的所有映射。例如
Conditional jump or move depends on uninitialised value(s)
对应
Memcheck:Cond
接下来是调用堆栈,如果您只有一个应用程序(没有动态库)并且它是使用调试信息编译的,那么您的生活会更轻松。你需要锻炼
- 使用 'fun' 的函数的错位名称
- 如果没有函数名,则动态库使用'obj'
- 如果你的 exe 被剥离,那么我认为你必须使用十六进制地址
您可能还想使用通配符。 '*' 匹配路径组件并且...匹配调用堆栈深度中的任何内容。例如
乐趣:foo
...
fun:bar
这将匹配 foo 和 bar 之间任意数量的调用级别。