blob: f6868e6e4eaa2ea6f06b97e1ec4d6ba32a12c018 [file] [log] [blame]
Greg Clayton1a3083a2010-10-06 03:53:16 +00001#!/usr/bin/python
2
3#----------------------------------------------------------------------
4# Be sure to add the python path that points to the LLDB shared library.
5# On MacOSX csh, tcsh:
6# setenv PYTHONPATH /Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python
7# On MacOSX sh, bash:
8# export PYTHONPATH=/Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python
9#----------------------------------------------------------------------
10
11import lldb
12import os
13import sys
14import time
15
16def disassemble_instructions (insts):
17 for i in range(0, insts.GetSize()):
18 print insts.GetInstructionAtIndex(i)
19
20# Initialize LLDB so we can use it
21lldb.SBDebugger.Initialize()
22
23# Create a new debugger instance
24debugger = lldb.SBDebugger.Create()
25
26# When we step or continue, don't return from the function until the process
27# stops. We do this by setting the async mode to false.
28debugger.SetAsync (False)
29
30# Create a target from a file and arch
31target = debugger.CreateTargetWithFileAndArch (sys.argv[1], "x86_64")
32
33if target.IsValid():
34 # If the target is valid set a breakpoint at main
35 main_bp = target.BreakpointCreateByName ("main", "a.out");
36
37 # Launch the process. Since we specified synchronous mode, we won't return
38 # from this function until we hit the breakpoint at main
39 process = target.LaunchProcess (sys.argv[2:], [''], "dev/stdout", 0, False)
40
41 # Make sure the launch went ok
42 if process.IsValid():
43 # Print some simple process info
44 print "process:", process, "\n"
45 # Get the first thread
46 thread = process.GetThreadAtIndex (0)
47 if thread.IsValid():
48 # Print some simple thread info
49 print "thread: ", thread
50 # Get the first frame
51 frame = thread.GetFrameAtIndex (0)
52 if frame.IsValid():
53 # Print some simple frame info
54 print "frame: ", frame
55 function = frame.GetFunction()
56 # See if we have debug info (a function)
57 if function.IsValid():
58 # We do have a function, print some info for the function
59 print "function: ", function, "\n"
60 # Now get all instructions for this function and print them
61 insts = function.GetInstructions(target)
62 disassemble_instructions (insts)
63 else:
64 # See if we have a symbol in the symbol table for where we stopped
65 symbol = frame.GetSymbol();
66 if symbol.IsValid():
67 # We do have a symbol, print some info for the symbol
68 print "symbol: ", symbol, "\n"
69 # Now get all instructions for this symbol and print them
70 insts = symbol.GetInstructions(target)
71 disassemble_instructions (insts)
72 # Now continue to the program exit
73 process.Continue()
74 # When we return from the above function we will hopefully be at the
75 # program exit. Print out some process info
76 print "process:", process, "\n"
77
78
79lldb.SBDebugger.Terminate()