That's totally fine for our use case. On Wed, Oct 5, 2016 at 11:57 AM, Jim Ingham <jing...@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 <r...@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 <k8st...@apple.com> wrote: > >> On Oct 5, 2016, at 10:14 AM, Rex Fenley via lldb-dev < > lldb-dev@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 k8st...@apple.com > > Xcode Low Level Tools > > > >> On Wed, Oct 5, 2016 at 10:06 AM, Rex Fenley <r...@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 <jing...@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@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@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@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>
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev