Decl/def matching with templates without template parameters in the DW_AT_name
Simon Marchi
simark@simark.ca
Mon Jan 16 21:18:40 GMT 2023
> The main thing I would want to avoid here is trying to put this extra
> name-construction into the indexer. That will just slow it down -- but
> this is normally the most user-visible slow thing in gdb, and most CUs
> are of no interest anyway.
>
> The downside of this decision is that expansion may expand too many
> CUs. So for example if there are a million instantiation of template X
> and the user types "break X<int>::method", gdb might expand every CU
> referencing X and then still only set one breakpoint.
>
> However if this is an issue I think the solution could be to be more
> selective at expansion time. That is, let the user input "X<int>" match
> X, but then actually examine the DIE tree to decide if this match should
> result in an expansion.
This is my understanding of what you are saying. Save the name without
the template part in the cooked index, but attach to it a data structure
that describes the template parameters. When the user types, let's say,
"b my_class<int, 2>::my_method", "my_class<int, 2>" gets translated to
the name "my_class" plus a description of the concrete arguments (the
type argument "int" and the value argument 2). Then, when checking if a
given CU should expanded, and we have a match for the "my_class" name,
we compare the data structures describing the parameters to the one
describing the arguments, see if it's really a match. Does that sound
right?
I'm just a bit worried that it might be difficult to implement this "is
there a match function", given the complex rules of C++ template
deduction. But maybe it's not so bad, or we already have that logic
somewhere.
Simon
More information about the Gdb
mailing list