summaryrefslogtreecommitdiffstats
path: root/lldb/examples/python/disasm.py
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/examples/python/disasm.py')
-rwxr-xr-xlldb/examples/python/disasm.py83
1 files changed, 48 insertions, 35 deletions
diff --git a/lldb/examples/python/disasm.py b/lldb/examples/python/disasm.py
index 8239cf337f9..3de3730c422 100755
--- a/lldb/examples/python/disasm.py
+++ b/lldb/examples/python/disasm.py
@@ -28,52 +28,65 @@ debugger = lldb.SBDebugger.Create()
debugger.SetAsync (False)
# Create a target from a file and arch
-target = debugger.CreateTargetWithFileAndArch (sys.argv[1], "x86_64")
+print "Creating a target for '%s'" % sys.argv[1]
+
+target = debugger.CreateTargetWithFileAndArch (sys.argv[1], lldb.LLDB_ARCH_DEFAULT)
if target.IsValid():
# If the target is valid set a breakpoint at main
main_bp = target.BreakpointCreateByName ("main", sys.argv[1]);
-
+
+ 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.LaunchProcess (sys.argv[2:], [''], "/dev/stdout", 0, False)
+ process = target.LaunchProcess ([''], [''], "/dev/stdout", 0, False)
# Make sure the launch went ok
if process.IsValid():
# Print some simple process info
- print "process:", process, "\n"
- # Get the first thread
- thread = process.GetThreadAtIndex (0)
- if thread.IsValid():
- # Print some simple thread info
- print "thread: ", thread
- # Get the first frame
- frame = thread.GetFrameAtIndex (0)
- if frame.IsValid():
- # Print some simple frame info
- print "frame: ", frame
- function = frame.GetFunction()
- # See if we have debug info (a function)
- if function.IsValid():
- # We do have a function, print some info for the function
- print "function: ", function, "\n"
- # 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.IsValid():
- # We do have a symbol, print some info for the symbol
- print "symbol: ", symbol, "\n"
- # Now get all instructions for this symbol and print them
- insts = symbol.GetInstructions(target)
+ state = process.GetState ()
+ print process
+ if state == lldb.eStateStopped:
+ # Get the first thread
+ thread = process.GetThreadAtIndex (0)
+ if thread.IsValid():
+ # Print some simple thread info
+ print thread
+ # Get the first frame
+ frame = thread.GetFrameAtIndex (0)
+ if frame.IsValid():
+ # Print some simple frame info
+ print frame
+ function = frame.GetFunction()
+ # See if we have debug info (a function)
+ if function.IsValid():
+ # 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)
- # Now continue to the program exit
- process.Continue()
- # When we return from the above function we will hopefully be at the
- # program exit. Print out some process info
- print "process:", process, "\n"
+ else:
+ # See if we have a symbol in the symbol table for where we stopped
+ symbol = frame.GetSymbol();
+ if symbol.IsValid():
+ # We do have a symbol, print some info for the symbol
+ print symbol
+ # Now get all instructions for this symbol and print them
+ insts = symbol.GetInstructions(target)
+ disassemble_instructions (insts)
+ print "Hit the breakpoint at main, continue and wait for program to exit..."
+ # Now continue to the program exit
+ process.Continue()
+ # When we return from the above function we will hopefully be at the
+ # program exit. Print out some process info
+ print process
+ elif state == lldb.eStateExited:
+ print "Didn't hit the breakpoint at main, program has exited..."
+ else:
+ print "Unexpected process state: %s, killing process..." % debugger.StateAsCString (state)
+ process.Kill()
+
lldb.SBDebugger.Terminate()
OpenPOWER on IntegriCloud