Re: Index files are not used in the session where they were created

Tom Tromey
2023-07-26T16:20:39Z

>>>>> "Dmitry" == Dmitry Neverov via Gdb <gdb@sourceware.org> writes:

Dmitry> I'm investigating whether index-caches help with slow symbols
Dmitry> loading (https://sourceware.org/bugzilla/show_bug.cgi?id=30520).

...

Dmitry> If I then try loading children of a variable causing a slow symbol
Dmitry> lookup, the lookup is still slow. Even though the index is ready
Dmitry> and is saved to disk.

Dmitry> If I restart gdb after the index is written, then gdb picks it
Dmitry> up, and symbol loading is much faster - a few seconds instead of
Dmitry> a minute.

Dmitry> Is there a way to use the created index without gdb restart?

Actually I'm surprised to hear that the index makes a difference in this
case. It would be good to understand this better -- maybe there's a
bug.

The reason I say that is that gdb has a "two phase" DWARF reader.

The first phase scans the DWARF, building a symbol table. In the index
case, this just means mapping in the index (and maybe doing a bit of
processing).

Currently, gdb will pause until this phase is complete. That is, if you
run "gdb -nx" and use "file some-executable", the prompt won't return
until scanning is done.

After this is what is called "full CU expansion". If you print a
variable or set a breakpoint (or otherwise cause gdb to need debug
info), gdb will re-read the DWARF for selected compilation units,
expanding the ones it thinks are necessary.

This phase only has a single implementation -- it does not depend on how
the scanning was done. This is why it's surprising that the index would
make a difference here.

That said, the two scanners might differ on how they select which CUs to
expand. I'd guess that is what you are seeing. Maybe it means that the
index is failing in some situation -- or maybe it means we could make
the DWARF scanner implementation a bit faster by having it expand less.

To figure this out, we'd probably need a test case. Maybe comparing the
results between the two scenarios with "set debug symtab-create on"
would indicate something.

Tom