Are any sources for symbols getting added to the process as you go along, like 
new shared library loads?  You are asking for a non-existent name, so every new 
source of debug info is a new place to look.

It's also possible that we are completing some types during the course of the 
expression evaluation, and then the newly completed types become themselves new 
places to look for this non-existent name.

You can see what is getting looked up by turning in the expression log (log 
enable lldb expr) then looking for the FindExternalVisibleDecls entries.

Jim


> On Jul 8, 2019, at 3:33 PM, Jason Molenda via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> Hm, that's interesting.
> 
> I tried running a debug lldb on /bin/ls.  then I attached from another lldb.  
> I put a breakpoint on CommandObjectTargetModulesLookup::DoExecute and resumed 
> execution.  In the debuggee lldb, I did
> 
> tar mod loo -a 0
> 
> 
> and auto-repeated return so the same command would be executed over and over.
> 
> In the debugger lldb, I tried adding a command to the breakpoint,
> 
> br comm add 
> p does_not_exist
> DONE
> 
> and continuing - after a couple dozen times, I didn't see a slowdown.  I 
> tried adding a breakpoint condition,
> 
> br mod -c 'doesNotExist == 1' 1
> 
> and continuing, and didn't see a slowdown after a few dozen repetitions.
> 
> I'm on macOS using .o file DWARF debugging.
> 
> I'm sure there's a bug here, but it may be more specific to the platform and 
> type of debug info that you're using? It could be that lldb is too small of a 
> project to repo this problem too.
> 
> 
> 
>> On Jul 4, 2019, at 11:38 AM, Guilherme Andrade via lldb-dev 
>> <lldb-dev@lists.llvm.org> wrote:
>> 
>> I have two breakpoint inside methods that are called every frame (C++ 
>> project using Unreal), and every time one of them is reached, I evaluate one 
>> expression (I'm being able to reproduce this using an undefined name, say 
>> "undefinedVariable"). After a few iterations (usually tens), the time it 
>> takes for LLDB to say that name doesn't exist increases, despite being the 
>> same expression, at the same breakpoint and the call stack remaining 
>> unchanged.
>> 
>> I've noticed that the number of lexical Decl queries and imports conducted 
>> by Clang reported in 'Local metrics' increase.
>> 
>> They go from:
>> Number of visible Decl queries by name     : 29
>> Number of lexical Decl queries                    : 9
>> Number of imports initiated by LLDB           : 15
>> Number of imports conducted by Clang      : 827
>> Number of Decls completed                        : 5
>> Number of records laid out                          : 2 
>> 
>> To:
>> Number of visible Decl queries by name     : 29
>> Number of lexical Decl queries                    : 14
>> Number of imports initiated by LLDB           : 15
>> Number of imports conducted by Clang      : 1342
>> Number of Decls completed                        : 5
>> Number of records laid out                          : 2
>> 
>> Also, the number of SymbolFileDWARF operations in the logs jumps from 366 to 
>> 406.
>> 
>> So, I've got two questions. 1) Is it safe to say that those extra imports 
>> and Decl queries are responsible for the performance loss? 2) Why do they 
>> happen?
>> 
>> Thanks!
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev@lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to