2 ##===-- lui.py -----------------------------------------------*- Python -*-===##
4 # The LLVM Compiler Infrastructure
6 # This file is distributed under the University of Illinois Open Source
7 # License. See LICENSE.TXT for details.
9 ##===----------------------------------------------------------------------===##
17 from optparse import OptionParser
36 def handle_args(driver, argv):
37 parser = OptionParser()
42 help="Attach to specified Process ID",
48 help="Load specified core file",
51 (options, args) = parser.parse_args(argv)
53 if options.pid is not None:
55 pid = int(options.pid)
56 driver.attachProcess(ui, pid)
58 print "Error: expecting integer PID, got '%s'" % options.pid
59 elif options.core is not None:
60 if not os.path.exists(options.core):
62 "Specified core file '%s' does not exist." %
64 driver.loadCore(options.core)
66 if not os.path.isfile(args[1]):
67 raise Exception("Specified target '%s' does not exist" % args[1])
68 driver.createTarget(args[1])
70 if not os.path.isfile(args[1]):
71 raise Exception("Specified target '%s' does not exist" % args[1])
72 driver.createTarget(args[1], args[2:])
75 def sigint_handler(signal, frame):
80 class LLDBUI(cui.CursesUI):
82 def __init__(self, screen, event_queue, driver):
83 super(LLDBUI, self).__init__(screen, event_queue)
87 h, w = self.screen.getmaxyx()
89 command_win_height = 20
92 self.status_win = statuswin.StatusWin(0, h - 1, w, 1)
94 self.command_win = commandwin.CommandWin(
95 driver, 0, h - command_win_height, w, command_win_height)
96 h -= command_win_height
97 self.source_win = sourcewin.SourceWin(driver, 0, 0,
98 w - break_win_width - 1, h)
99 self.break_win = breakwin.BreakWin(driver, w - break_win_width, 0,
102 self.wins = [self.status_win,
109 self.focus = len(self.wins) - 1 # index of command window;
111 def handleEvent(self, event):
113 if isinstance(event, int):
114 if event == curses.KEY_F10:
115 self.driver.terminate()
116 if event == 20: # ctrl-T
118 ret = lldb.SBCommandReturnObject()
119 self.driver.getCommandInterpreter().HandleCommand(cmd, ret)
120 foo('target create a.out')
123 super(LLDBUI, self).handleEvent(event)
127 signal.signal(signal.SIGINT, sigint_handler)
130 event_queue = Queue.Queue()
133 debugger = lldb.SBDebugger.Create()
135 driver = debuggerdriver.createDriver(debugger, event_queue)
136 view = LLDBUI(screen, event_queue, driver)
140 # hack to avoid hanging waiting for prompts!
141 driver.handleCommand("settings set auto-confirm true")
143 handle_args(driver, sys.argv)
146 if __name__ == "__main__":
149 except KeyboardInterrupt: