jingham added a comment.

In D118814#3297198 <https://reviews.llvm.org/D118814#3297198>, @JDevlieghere 
wrote:

> In D118814#3297075 <https://reviews.llvm.org/D118814#3297075>, @jingham wrote:
>
>> In D118814#3296008 <https://reviews.llvm.org/D118814#3296008>, @labath wrote:
>>
>>> This seems fine, though it's not clear to me what is the effect of this 
>>> patch in terms of functionality. Does the "side-effect" mentioned by Jim 
>>> still apply here, or is this NFC now? Either is probably fine, but I'd like 
>>> to understand what is going on. It seems like it should be NFC, but does 
>>> that mean that the demangling (and the cpu/memory cost) is delayed until 
>>> the first operation which requests it (such as matching a breakpoint by the 
>>> full demangled name) ?
>>
>> I haven't gone back to read our lookups in detail, but I certainly hope that 
>> the first time we see a breakpoint on a symbol name we don't recognize, we 
>> wouldn't go demangling every symbol name in the system.  We really try to 
>> keep mistypings from cascading into "unpack the entire world" events.
>
> Yes, this does break the ability to set breakpoints on full demangled names. 
> Based on the code and the comments, it really looks like it was always the 
> intention to avoid demangling the whole name, but then (accidentally?) made 
> it work by storing it in the ConstString. The continue on line 333 is what 
> prevents us from indexing the full name. Before this patch,  
> `GetDemangledName` would return the cached full demanged name, which now 
> isn't cached and would have to be computed on demand (effectively defeating 
> the purpose of this patch and making things slower).

We really should come up with a good story for symbol lookup on function names 
that include arguments, but "match the exact output of the demangler" was never 
a good story.  And I don't think we need pre-demangled names to do it right, 
rather we should pull the method name out of the user specification, find the 
matches to that - which goes quickly 'cause it uses the name chopper indices - 
then winnow down the matches.  Since this is just for function name matches, we 
could even do smart stuff like (this is spitballing, not a proposed design):

(lldb) break set -n foo::bar::bar(int, *)

meaning, the first parameter has to be an int, I don't care about the others, 
etc.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118814/new/

https://reviews.llvm.org/D118814

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

Reply via email to