Valgrind 和通配符?

问题描述 投票:0回答:1

根据 valgrind 文档

位置可以是共享对象、函数或源代码行的名称。它们分别以 obj:、fun: 或 src: 开头。要匹配的函数、对象和文件名可以使用通配符 * 和 ?。源行使用 filename[:lineNumber] 形式指定。

所以

?
算作通配符,但是,要匹配什么?我有这样的堆栈框架:

==60548== Invalid write of size 4
==60548==    by 0x....: ???
==60548==    by 0x....: ???
==60548==    by 0x....: function_signature_2 (in /some/path/libX.so)
==60548==    by 0x....: function_signature_3 (in /some/path/libX.so)
==60548==    by 0x....: function_signature_4 (some_file2:some_line2)
例如,我想过滤那些在堆栈顶部具有

???

 的内容。我可以编写自定义抑制:

{ mysuppression Memcheck:Addr4 obj:??? }
而且看起来效果不错,但是

?

到底是做什么用的呢?匹配一个单个字符(因此 
obj:???
 匹配名称为 3 个字符长的所有对象?),还是将前一个字符标记为可选出现? (在这种情况下,第一个字符 
?
 是什么意思?),或任何其他类似的含义?

valgrind
1个回答
0
投票
匹配就像 shell 通配符。

*

 匹配任意数量的任意字符。
?
 匹配任意字符一次。

在日志文件中,

???

表示未找到函数名称。它在匹配方面没有像抑制语法那样的任何意义。

© www.soinside.com 2019 - 2024. All rights reserved.