2

在我的工作中,我需要分析一些软件并获得一些未知时间前记录的抑制文件。这些文件之一 (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 的名称吗?

你能帮我在哪里找到上述问题的文档吗?

4

1 回答 1

2

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

是的。

函数名是如何生成的?

它们是编译器生成的错位函数名称;它们包含命名空间和/或类范围、函数名和参数。您可以使用c++filt它们来解开它们。

在我看来,_Znjw 或 _ZN3tsd 是 main 的名称吗?

_Znjwoperator new(unsigned)_ZN3tsd是 中事物的前缀namespace tsd

你能帮我在哪里找到上述问题的文档吗?

Valgrind 抑制文件记录在这里。GNU mangling 格式似乎没有正式记录。使用谷歌并拿走你找到的任何东西(假设你不想通过编译器源来查看名称是如何生成的)。

于 2013-11-27T14:53:54.510 回答