By the way: "swift" ends up executing:
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb --repl=-enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -color-diagnostics > On Aug 29, 2017, at 12:03 PM, Greg Clayton <clayb...@gmail.com> wrote: > > >> On Aug 29, 2017, at 11:41 AM, meister <chris.sc...@verizon.net> wrote: >> >> Greg, >> >> We are developing a compiler for Common Lisp that uses LLVM as the backend >> and interoperates with C++ - it has its own REPL and built in compiler. >> Our compiler generates llvm-ir that we link directly with llvm-ir generated >> from the C++ code using LTO. >> I’ve exposed much of the LLVM C++ API and Clang ASTMatcher C++ API for >> automatic analysis and refactoring of our C++ code. >> >> The Python API’s are not that useful to us. >> Although - maybe launching lldb as a separate process to get the backtrace >> with a python script may be a reasonable thing to do - if that’s all that I >> want to do. >> I’d also like to explore accessing lexical variables and setting breakpoints >> and watchpoints using the C++ API. >> The C++ API’s - they are much more straightforward to work with for us. >> >> I am already using ‘backtrace’ - but I don’t get function arguments with >> that sadly. > > You might think about integrating your REPL directly into LLDB? That is how > we did it with Swift. Then you get everything for free: > - debug your REPL code by setting breakpoints > - when a REPL code snippet crashes, see the backtrace! > > You might search for a Swift REPL demo and see what you think. > > > Below is an example of the Swift REPL that is built into LLDB: > > $ swift > Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). Type > :help for assistance. > 1> func foo() -> Int { > 2. return 12; > 3. } > 4. > 4> foo() > $R0: Int = 12 > > > Any line that starts with ':' is a LLDB command. Below we set a breakpoint on > line 2 of our REPL code: > > 5> :b 2 > Breakpoint 1: where = $__lldb_expr3`__lldb_expr_2.foo () -> Swift.Int + 4 at > repl.swift:2, address = 0x00000001000c5014 > > Now we can call foo() and hit our breakpoint: > > > 5> foo() > Execution stopped at breakpoint. Enter LLDB commands to investigate (type > help for assistance.) > Process 40238 stopped > * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 > frame #0: 0x00000001000c5014 $__lldb_expr3`foo() -> Int at repl.swift:2 > 1 func foo() -> Int { > -> 2 return 12; > 3 } > 4 foo() > 5 foo() > > > Note we drop into the LLDB command prompt. We can view variables, backtrace, > etc. Here we just continue: > > (lldb) c > Process 40238 resuming > > Now we are back in the REPL: > > 6> func bar() -> Int { > 7. return foo() + 23; > 8. } > 9> bar() > > We are going to call "bar()" which will call "foo()" so we will hit the > breakpoint again... > > > Execution stopped at breakpoint. Enter LLDB commands to investigate (type > help for assistance.) > Process 40238 stopped > * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 > frame #0: 0x00000001000c5014 $__lldb_expr3`foo() -> Int at repl.swift:2 > 1 func foo() -> Int { > -> 2 return 12; > 3 } > 4 foo() > 5 foo() > 6 func bar() -> Int { > 7 return foo() + 23; > (lldb) c > Process 40238 resuming > 10> > > > > _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev