> 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