有没有办法重用valgrind抑制文件?

时间:2013-11-27 14:12:00

标签: c++ valgrind suppression

在我的工作中,我需要分析一些软件并获得一些未知时间记录的抑制文件。其中一个文件(logging.supp)用于抑制日志记录错误。

我想在生成抑制文件和我的分析之间会更改日志记录和其他一些部分。

据我所知,valgrind使用堆栈来识别是否应该抑制泄漏。

我是否需要重新生成抑制文件,或者是否有办法更改文件中的内容?

抑制条目示例:

{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:_Znwj
fun:_ZN3tsd6common5types8SmartPtrINS0_7logging19LogSimpleDateFormatEEaSEPS4_
fun:_ZN3tsd6common7logging23LogDatePatternConverterC1ESt6vectorISsSaISsEE
fun:_ZN3tsd6common7logging16LogPatternParser15createConverterEcSt6vectorISsSaISsEE
fun:_ZN3tsd6common7logging16LogPatternParser17finalizeConverterEcSsiSsNS0_5types8SmartPtrINS1_17LogFormattingInfoEEERSt6vectorINS4_INS1_19LogPatternConverterEEESaIS9_EERS7_IS6_SaIS6_EE
fun:_ZN3tsd6common7logging16LogPatternParser5parseESsRSt6vectorINS0_5types8SmartPtrINS1_19LogPatternConverterEEESaIS7_EERS3_INS5_INS1_17LogFormattingInfoEEESaISC_EE
fun:_ZN3tsd6common7logging16PatternLogLayout15activateOptionsEv
fun:_ZN3tsd6common7logging16PatternLogLayoutC1ERKSs
fun:_ZN3tsd6common7logging14LoggingManager4initENS0_5types8SmartPtrINS1_23LogManagerConfigurationEEE
fun:_ZN3tsd6common7logging14LoggingManager4initERKSsS4_
fun:_ZN3tsd6common7logging14LoggingManager9getLoggerERKSs
fun:_ZN3tsd6common7logging6LoggerC1ERKSs
}

我发现并喜欢这个答案:

https://stackoverflow.com/a/14781867/2764334

我是否也可以使用这些点来忽略某些作为中间堆栈条目的函数?

如何生成函数名称?对我来说,看起来_Znjw或_ZN3tsd是main的名称?

您能帮助我找到上述问题的文档吗?

1 个答案:

答案 0 :(得分:2)

  

我是否也可以使用这些点来忽略某些作为中间堆栈条目的函数?

  

如何生成函数名称?

它们是由编译器生成的错位函数名;它们包含命名空间和/或类范围,函数名称和参数。您可以使用c++filt对其进行解码。

  

对我来说,看起来_Znjw或_ZN3tsd是main的名字?

_Znjwoperator new(unsigned)_ZN3tsdnamespace tsd中的内容的前缀。

  

您能帮助我找到上述问题的文档吗?

Valgrind抑制文件记录在案here。 GNU重整格式似乎没有正式记录;使用谷歌,并用一点点盐(你假设你不想通过编译器源搜索,看看如何生成名称)。