Greg, Thanks so much for the explanation! That was tremendously helpful!
- Jared On Aug 30, 2012, at 7:42 PM, Greg Clayton <[email protected]> wrote: > By default the debugger runs in async event mode where you would need to wait > for process events, and then wait for a process state changed event. > > If you just want to run and have say a "process.Continue()" send the continue > _and_ wait for the response, then you can enable synchronous mode: > > To do this, add this just after you create your debugger: > > dbg.SetAsync (False) > > If you don't, and you want to wait for events using the broadcasters. Once > you set async to False, as shown above, you will get the behavior you want. > The problem is, if your program gets stuck running, there is no way to > interrupt it when running in sync mode. > > If you want to see how to listen for events, you can search for "SBListener" > in any python files in the LLDB sources. One exmaple in particular is in: > > lldb/test/python_api/event/TestEvents.py > > When running in async mode, you request the debugger does something, but then > you need to wait for events. This allows you to correctly handle your events: > > > process = target.LaunchSimple(args, None, os.getcwd()) > if process: > > listener = lldb.SBListener("event_listener") > # sign up for process state change events > process.GetBroadcaster().AddListener(listener, > lldb.SBProcess.eBroadcastBitStateChanged) > > done = False > while not done: > event_wait_timeout_seconds = 3 > event = lldb::SBEvent() > if listener.WaitForEvent (event_wait_timeout_seconds, event): > state = lldb.SBProcess.GetStateFromEvent (event) > if state == lldb.eStateStopped: > ci.HandleCommand( cmd, res ) > print res > print "\n" > process.Continue() > elif state == lldb.eStateExited: > print "process exited" > done = True > elif state == lldb.eStateCrashed: > print "process crashed" > done = True > elif state == lldb.eStateDetached: > print "process detached" > done = True > elif state == lldb.eStateRunning: > # process is running, don't say anything, we will always > get one of these after resuming > elif state == lldb.eStateUnloaded: > print "process unloaded, this shouldn't happen" > done = True > elif state == lldb.eStateConnected or state == > lldb.eStateAttaching or state == lldb.eStateLaunching: > # You will see these as your process gets > connected/attached/launced > else: > # 3 second timeout with an event, what to do??? > process.Stop() # interrupt the process > process.Kill() # kill the process > > > > > On Aug 30, 2012, at 2:46 PM, Jared Carlson <[email protected]> wrote: > >> Since I'm on a roll, might as well ask another.. >> >> I can't seem to restart my process via process.Continue().. here's the code: >> >> def exercise( execfile, args, cmd ): >> dbg = lldb.SBDebugger.Create() >> target = dbg.CreateTarget( execfile ) >> bp1 = target.BreakpointCreateByName('override') >> bp1.SetEnabled(True) >> >> if not bp1.IsValid(): >> print "Breakpoint is not valid" >> return None >> >> ci = dbg.GetCommandInterpreter() >> res = lldb.SBCommandReturnObject() >> >> process = target.LaunchSimple( args,None,os.getcwd() ) >> process = target.GetProcess() >> >> while process.GetState() == lldb.eStateStopped: >> ci.HandleCommand( cmd, res ) >> print res >> print "\n" >> err = process.Continue() >> print err >> >> print "Done" >> return res >> >> When I run, the cmd (a backtrace) runs just fine but the process.Continue() >> fails: >> >> Status: Success >> Output Message: >> * thread #1: tid = 0x1d07, 0x000000010ac75db7 simple2`override(int) + 7 at >> simple.cxx:45, stop reason = breakpoint 1.1 >> frame #0: 0x000000010ac75db7 simple2`override(int) + 7 at simple.cxx:45 >> frame #1: 0x000000010ac75d13 simple2`check(int) + 19 at simple.cxx:29 >> frame #2: 0x000000010ac75cbe simple2`main + 46 at simple.cxx:18 >> frame #3: 0x00007fff912077e1 libdyld.dylib`start + 1 >> >> >> error: Resume request failed - process still running. >> >> Do I need to do something to the break point to allow the process to >> continue?? The code I see under the testing directories seems to not do >> anything in particular… >> >> Thanks for any help, >> >> - Jared >> >> >> On Aug 30, 2012, at 4:56 PM, Jared Carlson <[email protected]> wrote: >> >>> Thanks… >>> >>> Just noticed that… need more sleep ;) >>> >>> - Jared >>> >>> >>> On Aug 30, 2012, at 4:54 PM, Filipe Cabecinhas <[email protected]> wrote: >>> >>>> The correct name is 'IsValid' (capital 'I'). ;-) >>>> >>>> Regards, >>>> >>>> Filipe >>>> >>>> >>>> On Thursday, August 30, 2012 at 9:46 PM, Jared Carlson wrote: >>>> >>>>> Afternoon, >>>>> >>>>> I'm trying to run some lldb python code outside of Xcode and I'm running >>>>> into an issue.. >>>>> >>>>> So I used PYTHONPATH to point to the lldv module within Xcode.app (This >>>>> is on Mountain Lion) and I can import lldv, etc just fine from the >>>>> command line but when I try to use breakpoints or some other code I've >>>>> seen others use I run into swig issues, for example: >>>>> >>>>> bp1 = target.BreakpointCreateByName('override') >>>>>>>> bp1 >>>>>>> >>>>>> >>>>> >>>>> >>>>> <lldb.SBBreakpoint; proxy of <Swig Object of type 'lldb::SBBreakpoint *' >>>>> at 0x10d80dc30> > >>>>>>>> bp1.isValid() >>>>>>> >>>>>> >>>>> >>>>> >>>>> Traceback (most recent call last): >>>>> File "<stdin>", line 1, in <module> >>>>> File >>>>> "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/__init__.py", >>>>> line 1119, in <lambda> >>>>> __getattr__ = lambda self, name: _swig_getattr(self, SBBreakpoint, name) >>>>> File >>>>> "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/__init__.py", >>>>> line 78, in _swig_getattr >>>>> raise AttributeError(name) >>>>> AttributeError: isValid >>>>> >>>>> I can create various variables, etc… but I notice it seems like I'm >>>>> missing a few odds and ends.. I would guess that this is a linkage issue >>>>> but am a little stumped as to why it seems I'm getting most of the >>>>> functionality I expect. >>>>> >>>>> Thanks for any help you can give. >>>>> >>>>> - Jared >>>>> >>>>> >>>>> _______________________________________________ >>>>> lldb-dev mailing list >>>>> [email protected] (mailto:[email protected]) >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>>> >>>> >>>> >>> >> >> >> _______________________________________________ >> lldb-dev mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
