[Lldb-commits] [lldb] r185027 - Fixed the process_events.py example to be able to specify the platform and also use the debugger's listener.
Greg Clayton
gclayton at apple.com
Wed Jun 26 15:23:46 PDT 2013
Author: gclayton
Date: Wed Jun 26 17:23:45 2013
New Revision: 185027
URL: http://llvm.org/viewvc/llvm-project?rev=185027&view=rev
Log:
Fixed the process_events.py example to be able to specify the platform and also use the debugger's listener.
Modified:
lldb/trunk/examples/python/process_events.py
Modified: lldb/trunk/examples/python/process_events.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/python/process_events.py?rev=185027&r1=185026&r2=185027&view=diff
==============================================================================
--- lldb/trunk/examples/python/process_events.py (original)
+++ lldb/trunk/examples/python/process_events.py Wed Jun 26 17:23:45 2013
@@ -48,13 +48,6 @@ except ImportError:
print "error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly"
sys.exit(1)
-
-
-
-
-
-
-
def print_threads(process, options):
if options.show_threads:
for thread in process:
@@ -87,6 +80,7 @@ def main(argv):
parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help="Enable verbose logging.", default=False)
parser.add_option('-b', '--breakpoint', action='append', type='string', metavar='BPEXPR', dest='breakpoints', help='Breakpoint commands to create after the target has been created, the values will be sent to the "_regexp-break" command which supports breakpoints by name, file:line, and address.')
parser.add_option('-a', '--arch', type='string', dest='arch', help='The architecture to use when creating the debug target.', default=None)
+ parser.add_option('--platform', type='string', metavar='platform', dest='platform', help='Specify the platform to use when creating the debug target. Valid values include "localhost", "darwin-kernel", "ios-simulator", "remote-freebsd", "remote-macosx", "remote-ios", "remote-linux".', default=None)
parser.add_option('-l', '--launch-command', action='append', type='string', metavar='CMD', dest='launch_commands', help='LLDB command interpreter commands to run once after the process has launched. This option can be specified more than once.', default=[])
parser.add_option('-s', '--stop-command', action='append', type='string', metavar='CMD', dest='stop_commands', help='LLDB command interpreter commands to run each time the process stops. This option can be specified more than once.', default=[])
parser.add_option('-c', '--crash-command', action='append', type='string', metavar='CMD', dest='crash_commands', help='LLDB command interpreter commands to run in case the process crashes. This option can be specified more than once.', default=[])
@@ -135,16 +129,19 @@ def main(argv):
# Create a new debugger instance
debugger = lldb.SBDebugger.Create()
+ debugger.SetAsync (True)
command_interpreter = debugger.GetCommandInterpreter()
# Create a target from a file and arch
if exe:
print "Creating a target for '%s'" % exe
- target = debugger.CreateTargetWithFileAndArch (exe, options.arch)
+ error = lldb.SBError()
+ target = debugger.CreateTarget (exe, options.arch, options.platform, True, error)
if target:
- # Set any breakpoints that were specified in the args if we are launching
+ # Set any breakpoints that were specified in the args if we are launching. We use the
+ # command line command to take advantage of the shorthand breakpoint creation
if launch_info and options.breakpoints:
for bp in options.breakpoints:
debugger.HandleCommand( "_regexp-break %s" % (bp))
@@ -175,70 +172,72 @@ def main(argv):
# Make sure the launch went ok
if process and process.GetProcessID() != lldb.LLDB_INVALID_PROCESS_ID:
pid = process.GetProcessID()
- listener = lldb.SBListener("event_listener")
+ listener = debugger.GetListener()
# sign up for process state change events
- process.GetBroadcaster().AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
+ #process.GetBroadcaster().AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
stop_idx = 0
done = False
while not done:
event = lldb.SBEvent()
if listener.WaitForEvent (options.event_timeout, event):
- state = lldb.SBProcess.GetStateFromEvent (event)
- print "event %s" % (lldb.SBDebugger.StateAsCString(state))
- if state == lldb.eStateStopped:
- if stop_idx == 0:
- if launch_info:
- print "process %u launched" % (pid)
- else:
- print "attached to process %u" % (pid)
- for m in target.modules:
- print m
- if options.breakpoints:
- for bp in options.breakpoints:
- debugger.HandleCommand( "_regexp-break %s" % (bp))
+ if lldb.SBProcess.EventIsProcessEvent(event):
+ state = lldb.SBProcess.GetStateFromEvent (event)
+ print "event %s" % (lldb.SBDebugger.StateAsCString(state))
+ if state == lldb.eStateStopped:
+ if stop_idx == 0:
+ if launch_info:
+ print "process %u launched" % (pid)
run_commands(command_interpreter, ['breakpoint list'])
- run_commands (command_interpreter, options.launch_commands)
- else:
+ else:
+ print "attached to process %u" % (pid)
+ for m in target.modules:
+ print m
+ if options.breakpoints:
+ for bp in options.breakpoints:
+ debugger.HandleCommand( "_regexp-break %s" % (bp))
+ run_commands(command_interpreter, ['breakpoint list'])
+ run_commands (command_interpreter, options.launch_commands)
+ else:
+ if options.verbose:
+ print "process %u stopped" % (pid)
+ run_commands (command_interpreter, options.stop_commands)
+ stop_idx += 1
+ print_threads (process, options)
+ print "continuing process %u" % (pid)
+ process.Continue()
+ elif state == lldb.eStateExited:
+ exit_desc = process.GetExitDescription()
+ if exit_desc:
+ print "process %u exited with status %u: %s" % (pid, process.GetExitStatus (), exit_desc)
+ else:
+ print "process %u exited with status %u" % (pid, process.GetExitStatus ())
+ run_commands (command_interpreter, options.exit_commands)
+ done = True
+ elif state == lldb.eStateCrashed:
+ print "process %u crashed" % (pid)
+ print_threads (process, options)
+ run_commands (command_interpreter, options.crash_commands)
+ done = True
+ elif state == lldb.eStateDetached:
+ print "process %u detached" % (pid)
+ done = True
+ elif state == lldb.eStateRunning:
+ # process is running, don't say anything, we will always get one of these after resuming
if options.verbose:
- print "process %u stopped" % (pid)
- run_commands (command_interpreter, options.stop_commands)
- stop_idx += 1
- print_threads (process, options)
- print "continuing process %u" % (pid)
- process.Continue()
- elif state == lldb.eStateExited:
- exit_desc = process.GetExitDescription()
- if exit_desc:
- print "process %u exited with status %u: %s" % (pid, process.GetExitStatus (), exit_desc)
- else:
- print "process %u exited with status %u" % (pid, process.GetExitStatus ())
- run_commands (command_interpreter, options.exit_commands)
- done = True
- elif state == lldb.eStateCrashed:
- print "process %u crashed" % (pid)
- print_threads (process, options)
- run_commands (command_interpreter, options.crash_commands)
+ print "process %u resumed" % (pid)
+ elif state == lldb.eStateUnloaded:
+ print "process %u unloaded, this shouldn't happen" % (pid)
+ done = True
+ elif state == lldb.eStateConnected:
+ print "process connected"
+ elif state == lldb.eStateAttaching:
+ print "process attaching"
+ elif state == lldb.eStateLaunching:
+ print "process launching"
+ else:
+ # timeout waiting for an event
+ print "no process event for %u seconds, killing the process..." % (options.event_timeout)
done = True
- elif state == lldb.eStateDetached:
- print "process %u detached" % (pid)
- done = True
- elif state == lldb.eStateRunning:
- # process is running, don't say anything, we will always get one of these after resuming
- if options.verbose:
- print "process %u resumed" % (pid)
- elif state == lldb.eStateUnloaded:
- print "process %u unloaded, this shouldn't happen" % (pid)
- done = True
- elif state == lldb.eStateConnected:
- print "process connected"
- elif state == lldb.eStateAttaching:
- print "process attaching"
- elif state == lldb.eStateLaunching:
- print "process launching"
- else:
- # timeout waiting for an event
- print "no process event for %u seconds, killing the process..." % (options.event_timeout)
- done = True
process.Kill() # kill the process
else:
if error:
More information about the lldb-commits
mailing list