[lldb-dev] --top-level doesn't work in lldb for Objective-C or Swift :(

Rex Fenley via lldb-dev lldb-dev at lists.llvm.org
Wed Oct 5 12:05:53 PDT 2016


That's totally fine for our use case.

On Wed, Oct 5, 2016 at 11:57 AM, Jim Ingham <jingham at apple.com> wrote:

> You would have to be really careful about using "debugger variables" whose
> name is not decorated with a "$".  After all, this is introducing a global
> variable, which will be shadowed by local variables, ivars, file statics
> for the current frame's CU, etc.  So using the code you've added at various
> stop points in the debugging session will be fragile.  That's the primary
> reason that we don't encourage defining debugger variables in the common
> identifier namespace of your program.
>
> Jim
>
>
>
> > On Oct 5, 2016, at 11:41 AM, Rex Fenley <rex at remind101.com> wrote:
> >
> > Hey Kate! Thanks for all this info, it's really helpful :)
> >
> > We'd like to have more complex expressions being used from the debugger.
> Some of this would be code written in separate files. It will be difficult
> or at least very tedious to have all our code use "$", is there a way to
> void using "$"? Is there an option we could add to lldb to avoid using "$"
> and still have variables and data-structures globally accessible? I notice
> that within "repl" "$" it's not necessary to use any "$" variables, is
> there a way to elevate the logic "repl" uses into expr?
> >
> > On Wed, Oct 5, 2016 at 11:29 AM, Kate Stone <k8stone at apple.com> wrote:
> >> On Oct 5, 2016, at 10:14 AM, Rex Fenley via lldb-dev <
> lldb-dev at lists.llvm.org> wrote:
> >>
> >> Maybe I have that incorrectly, this does seem to work when using lldb
> from Xcode's console. This doesn't work when typing `lldb` into the
> terminal and using it from there. I assumed the two were the same.
> >
> > The same underlying debugger is used in both cases.  There can be subtle
> reasons for differences in behavior in the different contexts, but I don’t
> see how they’d apply here.  Let’s get to a specific scenario and ensure
> that we can resolve that for you.
> >
> >> On a separate note, --top-level doesn't seem to work for swift (from
> Xcode console lldb). We need it to work with swift for the scripts we'll be
> writing.
> >> (lldb) expr -l swift --top-level -- let i = 10
> >>
> >> expr -l swift --top-level -- let a = i
> >>
> >> error: <EXPR>:3:9: error: use of unresolved identifier 'i'
> >>
> > The --top-level option isn’t meaningful for Swift, so it’s completely
> ignored.  The less ambiguous nature of the language allows us to
> automatically determine what are top-level constructs and what’s intended
> to be evaluated in scope.  We introduced --top-level for Objective-C / C++
> primarily to enable declaring functions and anything else that literally
> cannot be written in a local scope.
> >
> > In your particular example the reason you can’t refer to “i” is
> completely unrelated.  Conceptually, every expression you evaluate is
> wrapped in its own scope.  So your two subsequent expressions act like this
> construct :
> >
> > do {
> >     let i = 10
> > }
> > do {
> >     let a = i
> > }
> >
> > As you can see, “i” is defined in this expression scope and then goes
> out of scope immediately after execution.  This is useful when you want to
> write a multi-line expression that introduces declarations for immediate
> use without having them cluttering up your namespace afterwards.  The
> convention used by LLDB for any declaration that you intend to use in later
> expressions is to prefix the name with a dollar sign.  So you can do the
> following:
> >
> > (lldb) expr -l swift -- let $i = 10
> > (lldb) expr -l swift -- let $a = i
> >
> > … and both “$a” and “$i" will be available in subsequent expressions.
> >
> > Kate Stone k8stone at apple.com
> >  Xcode Low Level Tools
> >
> >> On Wed, Oct 5, 2016 at 10:06 AM, Rex Fenley <rex at remind101.com> wrote:
> >> Jim,
> >>
> >> That doesn't seem to work for us. We're using lldb packaged with Xcode
> 8 fyi.
> >> (lldb) expr --top-level -- NSString *string = [NSString
> stringWithUTF8String: "This is a string"];
> >>
> >>
> >>
> >> ; Function Attrs: nounwind
> >>
> >> define internal void @_GLOBAL__sub_I__null_() #0 section
> "__TEXT,__StaticInit,regular,pure_instructions" {
> >>
> >>   call void @__cxx_global_var_init()
> >>
> >>   ret void
> >>
> >> }
> >>
> >>
> >> On Tue, Oct 4, 2016 at 4:09 PM, Jim Ingham <jingham at apple.com> wrote:
> >> This isn't an issue with ObjC support in general, but rather shows that
> ObjC string constants are odd beasts.  You can work around this pretty
> easily by making dynamic strings:
> >>
> >> (lldb) expr --top-level -- NSString *string = [NSString
> stringWithUTF8String: "This is a string"];
> >> (lldb) expr string
> >> (__NSCFString *) $0 = 0x00000001002001b0 @"This is a string"
> >>
> >> Please file a bug about the problem with ObjC constant strings.
> >>
> >> Jim
> >>
> >>
> >> > On Oct 4, 2016, at 3:57 PM, Rex Fenley via lldb-dev <
> lldb-dev at lists.llvm.org> wrote:
> >> >
> >> > Hey lldb team!
> >> >
> >> > I'm trying to use `expr --top-level` from lldb in Xcode but it throws
> errors like the following:
> >> >
> >> > (lldb) expression --top-level -- NSString *str = @"This is a string";
> >> > Error [IRForTarget]: Couldn't replace an Objective-C constant string
> with a dynamic string
> >> > error: cannot import unsupported AST node ObjCStringLiteral
> >> > error: The expression could not be prepared to run in the target
> >> >
> >> > It seems like top-level only supports raw C code and not Objective-C.
> Is there an option we can set to support this? Is there somewhere in lldb's
> source code that could help point us to fixing this?
> >> >
> >> > Thank you, you guys rule!
> >> >
> >> > --
> >> > Rex Fenley  |  IOS DEVELOPER
> >> >
> >> >
> >> > Remind.com |  BLOG  |  FOLLOW US  |  LIKE US
> >> > _______________________________________________
> >> > lldb-dev mailing list
> >> > lldb-dev at lists.llvm.org
> >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> >>
> >>
> >>
> >>
> >> --
> >> Rex Fenley  |  IOS DEVELOPER
> >>
> >>
> >> Remind.com |  BLOG  |  FOLLOW US  |  LIKE US
> >>
> >>
> >>
> >> --
> >> Rex Fenley  |  IOS DEVELOPER
> >>
> >>
> >> Remind.com |  BLOG  |  FOLLOW US  |  LIKE US
> >> _______________________________________________
> >> lldb-dev mailing list
> >> lldb-dev at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> >
> >
> >
> >
> > --
> > Rex Fenley  |  IOS DEVELOPER
> >
> >
> > Remind.com |  BLOG  |  FOLLOW US  |  LIKE US
>
>


-- 

Rex Fenley  |  IOS DEVELOPER

Remind.com <https://www.remind.com/> |  BLOG <http://blog.remind.com/>
 |  FOLLOW
US <https://twitter.com/remindhq>  |  LIKE US
<https://www.facebook.com/remindhq>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20161005/cc26be64/attachment.html>


More information about the lldb-dev mailing list