Works for me with top of tree: % PYTHONPATH=/tmp/lldb/build/Debug/LLDB.framework/Resources/Python ; ./foo.py ) Creating a target for './a.out' SBBreakpoint: id = 1, name = 'main', module = a.out, locations = 1 SBProcess: pid = 62855, state = stopped, threads = 1, executable = a.out thread #1: tid = 0x558f56, 0x000000010226bf74 a.out`main(argc=1, argv=0x00007fff5d994ec8) at main.cpp:15, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x000000010226bf74 a.out`main(argc=1, argv=0x00007fff5d994ec8) at main.cpp:15 SBFunction: id = 0x0000004b, name = main, type = main a.out[0x100000f60]: pushq %rbp a.out[0x100000f61]: movq %rsp, %rbp a.out[0x100000f64]: xorl %eax, %eax a.out[0x100000f66]: movl $0x0, -0x4(%rbp) a.out[0x100000f6d]: movl %edi, -0x8(%rbp) a.out[0x100000f70]: movq %rsi, -0x10(%rbp) a.out[0x100000f74]: popq %rbp a.out[0x100000f75]: retq
this is on a Mac though. Might be something specific to linux. Greg > On Feb 13, 2017, at 10:23 AM, Roman Popov <ripo...@gmail.com> wrote: > > Do you mean you were able to reproduce it? Because it is used to work on > trunk month ago, but since then I've switched from ubuntu 14.04 to fresh > 16.04 and it no longer works for me. > > 2017-02-13 21:21 GMT+03:00 Greg Clayton <gclay...@apple.com > <mailto:gclay...@apple.com>>: > I would be probably best to just step through it and see why it is > incorrectly returning. We know it is broken. We should also add a test for > this so we don't regress again. > > Greg > >> On Feb 13, 2017, at 10:19 AM, Roman Popov <ripo...@gmail.com >> <mailto:ripo...@gmail.com>> wrote: >> >> Yes Greg, this was my expectation that it should not return until stops on >> break-point. But I had to downgrade sequentially from 5.0 to 4.0 to 3.9 to >> make it work as expected. >> >> Can I get some diagnostics? Any log files? >> >> 2017-02-13 20:11 GMT+03:00 Greg Clayton <gclay...@apple.com >> <mailto:gclay...@apple.com>>: >> The example code is: >> >> #!/usr/bin/python >> >> import lldb >> import os >> >> def disassemble_instructions(insts): >> for i in insts: >> print i >> >> # Set the path to the executable to debug >> exe = "./a.out" >> >> # Create a new debugger instance >> debugger = lldb.SBDebugger.Create() >> >> # When we step or continue, don't return from the function until the process >> # stops. Otherwise we would have to handle the process events ourselves >> which, while doable is >> #a little tricky. We do this by setting the async mode to false. >> debugger.SetAsync (False) >> >> # Create a target from a file and arch >> print "Creating a target for '%s'" % exe >> >> target = debugger.CreateTargetWithFileAndArch (exe, lldb.LLDB_ARCH_DEFAULT) >> >> if target: >> # If the target is valid set a breakpoint at main >> main_bp = target.BreakpointCreateByName ("main", >> target.GetExecutable().GetFilename()); >> >> print main_bp >> >> # Launch the process. Since we specified synchronous mode, we won't >> return >> # from this function until we hit the breakpoint at main >> process = target.LaunchSimple (None, None, os.getcwd()) >> >> # Make sure the launch went ok >> if process: >> # Print some simple process info >> state = process.GetState () >> print process >> if state == lldb.eStateStopped: >> # Get the first thread >> thread = process.GetThreadAtIndex (0) >> if thread: >> # Print some simple thread info >> print thread >> # Get the first frame >> frame = thread.GetFrameAtIndex (0) >> if frame: >> # Print some simple frame info >> print frame >> function = frame.GetFunction() >> # See if we have debug info (a function) >> if function: >> # We do have a function, print some info for the >> function >> print function >> # Now get all instructions for this function and >> print them >> insts = function.GetInstructions(target) >> disassemble_instructions (insts) >> else: >> # See if we have a symbol in the symbol table for >> where we stopped >> symbol = frame.GetSymbol(); >> if symbol: >> # We do have a symbol, print some info for the >> symbol >> print symbol >> >> We set the async mode to false, so target.LaunchSimple() should not return >> until the process is stopped or exited. Note in your example it is returning >> with "state = launching", so this is what is failing. For some reason >> synchronous mode is not being obeyed. >> >> Greg >> >>> On Feb 11, 2017, at 10:07 AM, Roman Popov via lldb-dev >>> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote: >>> >>> I'm testing example from https://lldb.llvm.org/python-reference.html >>> <https://lldb.llvm.org/python-reference.html> (USING THE LLDB.PY MODULE IN >>> PYTHON) on Ubuntu 16.04 >>> >>> For some reason it works only with LLDB 3.9, is it because LLDB 4.0/5.0 are >>> not stable yet? >>> >>> #5.0 -- Does not work >>> deb http://apt.llvm.org/xenial/ <http://apt.llvm.org/xenial/> >>> llvm-toolchain-xenial main >>> # 3.9 -- Works >>> deb http://apt.llvm.org/xenial/ <http://apt.llvm.org/xenial/> >>> llvm-toolchain-xenial-3.9 main >>> # 4.0 -- Does not work >>> deb http://apt.llvm.org/xenial/ <http://apt.llvm.org/xenial/> >>> llvm-toolchain-xenial-4.0 main >>> >>> >clang-5.0 -g test.cpp >>> >./python_example.py >>> Creating a target for './a.out' >>> SBBreakpoint: id = 1, name = 'main', locations = 1 >>> SBProcess: pid = 0, state = launching, threads = 0, executable = a.out >>> Thanks, >>> Roman >>> _______________________________________________ >>> lldb-dev mailing list >>> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev> >> >> > >
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev