According to the valgrind docs:
Locations may be names of either shared objects, functions, or source lines. They begin with obj:, fun:, or src: respectively. Function, object, and file names to match against may use the wildcard characters * and ?. Source lines are specified using the form filename[:lineNumber].
So ?
counts as a wildcard, but, to match what? I have stackframes like:
==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)
and I want to filter those that have ???
in the top of the stack for example. I can write the custom suppression:
{
mysuppression
Memcheck:Addr4
obj:???
}
and it seems to work nicely, but what exactly does ?
? Matching one single character (and so obj:???
is matching all objects whose name is 3 chars long?), or marking the previous character as optionally appearing? (in which case, what would ?
as first character mean?), or any other similar meaning?
The matching is like shell globbing.
*
matches any number of any character.
?
matches once any character.
In the log file, ???
means that no function name was found. It doesn’t have any meaning in terms of matching like the suppression syntax.