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

Jim Ingham via lldb-dev lldb-dev at lists.llvm.org
Wed Oct 5 11:03:34 PDT 2016


> On 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
> 
> }
> 
> 

Yes, I see that printout too, but it doesn't make the expression not work.  With 8.0 I see:

(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
}

(lldb) po string
This is a string

So the expression definitely worked.

Can you file a bug about the spammy printing?  Looks like somebody left a printf in code somewhere.

Jim

> 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



More information about the lldb-dev mailing list