[Lldb-commits] [PATCH] D53597: Don't type-erase the SymbolContextItem enum

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Thu Oct 25 12:09:43 PDT 2018


Yes, it's an interesting dichotomy how the two formats have evolved.  PDB
was designed with IDEs in mind so it's optimized around exact matches.  For
example, you press a key on a specific line of code.  Nobody ever is
entering commands to do fuzzy lookups based on base names, so this was
never really considered a use case.  And if you go and try to use Windows
command line debuggers, it's indeed slow.

On Thu, Oct 25, 2018 at 11:51 AM Jim Ingham <jingham at apple.com> wrote:

> I am pretty sure the has is computed from the name string.  And BTW,
> having the base name in the quick lookup tables (either with or alongside
> the full name) is a really good thing.  People using the debugger really
> don't want to type out fully qualified names as a general rule.  So you
> have to quickly support incomplete name searches, and the best way to do
> that is grab the base name, and start matching up to where the input
> stopped specifying the name.  So if you're only going to have one entry per
> type, having the base name be the quick lookup is more flexible, though it
> does have the cost that fully specified names are slower to lookup.  But
> the slowness is not O(number of symbols) which would be horrible but
> O(number of symbols with this base name).  That can get bad for all the
> commonly used type names in C++ templates - the STL seems to produce
> boatloads of types of the same base name.  But still isn't that bad.
>
> Jim
>
>
> > On Oct 25, 2018, at 11:40 AM, Zachary Turner <zturner at google.com> wrote:
> >
> > I guess the question is, How is that hash and the bucket computed?  If
> it's based on the full name, then you should be able to get fast exact
> lookup.  If it's based on the based name, then it will indeed be slow.
> >
> > On Thu, Oct 25, 2018 at 11:33 AM Jim Ingham via Phabricator via
> lldb-commits <lldb-commits at lists.llvm.org> wrote:
> > jingham added a comment.
> >
> > Ah, right...  Too many patches (a good problem!)
> >
> > The standard as I read it says that the name entry points into the
> general string table, but doesn't specify which entry it points to.
> However, the current DWARF debug_info doesn't ever emit a string for the
> fully qualified name, so you would have to construct it specially to have
> an exact name to refer to.  I also couldn't see anything that said
> specifically whether the DW_AT_name for a type has to be the full name or a
> base name, it just says:
> >
> > If a name has been given to the structure, union, or class in the source
> program, then the corresponding structure type, union type, or class type
> entry has a DW_AT_name attribute whose value is a null-terminated string
> containing the type name.
> >
> > But it would bloat the name tables to use the full name, and since you
> can reconstruct it from the context it's not needed...  So I've only seen
> base names in the name entry for types in the debug_info.
> >
> > Anyway, current clang for -gdwarf-5 produces:
> >
> >   Bucket 1 [
> >     Name 2 {
> >       Hash: 0xB887389
> >       String: 0x000000c3 "Foo"
> >       Entry @ 0x92 {
> >         Abbrev: 0x39
> >         Tag: DW_TAG_namespace
> >         DW_IDX_die_offset: 0x0000004c
> >       }
> >     }
> >   ]
> >   Bucket 2 [
> >     Name 3 {
> >       Hash: 0xB8860BA
> >       String: 0x000000c7 "Bar"
> >       Entry @ 0x9b {
> >         Abbrev: 0x13
> >         Tag: DW_TAG_structure_type
> >         DW_IDX_die_offset: 0x0000004e
> >       }
> >     }
> >     Name 4 {
> >       Hash: 0x7C9A7F6A
> >       String: 0x000000b5 "main"
> >       Entry @ 0xa4 {
> >         Abbrev: 0x2E
> >         Tag: DW_TAG_subprogram
> >         DW_IDX_die_offset: 0x00000026
> >       }
> >     }
> >
> > For:
> >
> > namespace Foo
> > {
> >
> >   struct Bar
> >   {
> >     int First;
> >   };
> >
> > }
> >
> > int
> > main()
> > {
> >
> >   Foo::Bar mine = {10};
> >   return mine.First;
> >
> > }
> >
> > Jim
> >
> >
> > https://reviews.llvm.org/D53597
> >
> >
> >
> > _______________________________________________
> > lldb-commits mailing list
> > lldb-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20181025/8acad53e/attachment.html>


More information about the lldb-commits mailing list