> On Oct 26, 2017, at 9:34 AM, Zachary Turner <ztur...@google.com 
> <mailto:ztur...@google.com>> wrote:
> 
> Note that $ is a valid character in a MSVC-mangled symbol name.  So, I don't 
> think it will work for that reason alone.  FWIW, I also don't like the {,,} 
> syntax very much, but if you read on there's a simpler ! syntax that is 
> pretty nice.
> 
> libfoo!symbolname
lldb uses the initial $ to distinguish keep user defined and result variables 
and keep them from colliding with program variables (well beyond this 
particular requirement).  For instance, lldb uses the fact that you did:

(lldb) expr int $my_string_ptr = nullptr

to tell itself that this is a persistent result variable that you can refer to 
in other expressions.  So this is a well established practice in lldb.  The 
proposal to extend it to scoping is just a natural extension of that.

Are mangled names with initial $’s common in Windows?  If so we may need to 
abstract this initial character and choose a different one for Windows.  Or at 
least we’ll have to add code to look up the name (or try to demangle it) before 
deciding it is a persistent variable.  Again, it doesn’t matter if $ can be 
used internally, we always trigger off an initial $.

Note that it is also possible to allow $’s in regular symbol names with a clang 
compiler flag.  But we’ve always treated that as a caveat emptor type thing, 
and we haven’t gotten any reports of this causing real problems.

Jim

> 
> 
> On Thu, Oct 26, 2017 at 9:30 AM Greg Clayton <clayb...@gmail.com 
> <mailto:clayb...@gmail.com>> wrote:
> 
>> On Oct 25, 2017, at 6:05 PM, Zachary Turner <ztur...@google.com 
>> <mailto:ztur...@google.com>> wrote:
>> 
>> 
>> 
>> On Wed, Oct 25, 2017 at 4:59 PM Jim Ingham via Phabricator 
>> <revi...@reviews.llvm.org <mailto:revi...@reviews.llvm.org>> wrote:
>> jingham added a comment.
>> 
>> Note, BTW, we absolutely need some way to say "this symbol from this 
>> library".  But first of all, if we're going to do this you need to be able 
>> to mix & match within an expression which you can't do with a flag to expr.  
>>  Instead you need something like:
>> 
>> (lldb) expr $$MyDylib$my_symbol + $$MyOtherDylib$my_other_symbol
>> 
>> That syntax is ugly, we should try to think of something better.  But the 
>> main point is this should only be necessary when lldb can't find a unique 
>> symbol.  When we can no intervention should be required.
>> 
>> +1, this is very useful.  The Microsoft syntax for this is here:
>> 
>> https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp 
>> <https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp>
>> 
>> Which is pretty nice imo
> 
> The main reason for using $ decorated names is because clang will accept them 
> as identifiers and ask us about them. So "$$MyOtherDylib$my_other_symbol" is 
> just a valid identifier and would result in a find external lexical decl call 
> that we can fill in with whatever we want. 
> 
> We don't really want to muck with clang by overloading stuff with symbols 
> that would hose up clang (like the MSVC examples 
> "{,,EXAMPLE.dll}SomeFunction", "EXAMPLE.dll!SomeFunction", and "{,,"a long, 
> long, library name.dll"}g_Var". The { } and , characters would hose up the 
> expression parser. So I would vote to use the $ decoration as Jim suggested.
> 
> Greg

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

Reply via email to