51d6ce1d7026773737b639e242642d77e46bba16
14 import ClientIOTerminal
18 class DbgTerminal (vte
.Terminal
):
24 def __init__(self
, clientCmd
):
26 vte
.Terminal
.__init
__(self
)
29 self
.clientCmd
= clientCmd
30 self
.fork_command( self
.getDbgCommand(), self
.getDbgArgv())
32 #Open pseudo-terminal where to-be-debugged process reads/writes to
33 self
.client_ptymaster
, self
.client_ptyslave
= pty
.openpty()
34 self
.setDbgPty(self
.client_ptyslave
)
36 #Set up terminal window and initialize debugger
37 self
.connect("cursor-moved", self
.contents_changed
)
38 self
.connect("eof", lambda *w
: gtk
.main_quit())
41 def contents_changed(self
, term
):
42 c
,r
= term
.get_cursor_position()
45 text
= self
.get_text_range(self
.lastrow
,0,r
-1,-1,lambda *w
:True)
46 self
.history
+= string
.split(text
, "\n")
49 def waitForDbgNewline(self
):
51 while not self
.lastrow
> r
:
54 def getHistoryLen(self
):
55 return len(self
.history
)
57 def waitForDbgRx(self
, rx
, start
=None):
60 start
= self
.getHistoryLen()
65 for no
in range(start
, self
.getHistoryLen()):
66 line
= self
.history
[no
]
70 start
= self
.getHistoryLen()
71 self
.waitForDbgNewline()
74 def getDbgCommand(self
):
75 return self
.getDbgArgv()[0];
78 raise NotImplementedError()
80 def setDbgPty(self
, pty
):
81 raise NotImplementedError()
84 raise NotImplementedError()
87 raise NotImplementedError()
89 def setDbgContinue(self
):
90 raise NotImplementedError()
92 def setDbgBreakpoint(self
, file, lineno
):
93 raise NotImplementedError()
95 def getDbgExpression(self
, expr
):
96 raise NotImplementedError()
98 def getDbgLastLine(self
):
99 if len(self
.history
) == 0:
102 return self
.history
[-1]
104 def feed_dbg(self
, text
):
105 self
.feed_child(text
)
112 class DbgWindow (gtk
.Window
):
117 def __init__(self
, terminal
):
120 self
.terminal
= terminal
123 gtk
.Window
.__init
__(self
)
124 self
.connect("destroy", lambda *w
: gtk
.main_quit())
126 #Set title and add terminal
127 self
.set_title("Debugger I/O")
128 self
.terminal
.history
= []
129 self
.terminal
.history_length
= 5
130 self
.add(self
.terminal
)
135 def toggleClientIOWindow(self
):
136 if not self
.clientIOWnd
:
137 self
.clientIOWnd
= ClientIOTerminal
.ClientIOWindow(self
, self
.terminal
.client_ptymaster
)
139 self
.clientIOWnd
.destroy()
140 self
.clientIOWnd
= None
142 def isClientIOWindowExisting(self
):
143 return self
.clientIOWnd
!= None
148 def launchDebugger(wnd
, term
):
150 wnd
.toggleClientIOWindow()
152 term
.setDbgBreakpoint("main.cpp", 15)
154 res
= term
.getDbgExpression("a")
155 print "Result = ", res