def __init__(self, clientCmd):
DbgTerminal.DbgTerminal.__init__(self, clientCmd)
- def getDbgArgv(self):
+ def getArgv(self):
return ["gdb", "--fullname", string.split(self.clientCmd)[0]]
- def setDbgPty(self, pty):
+ def setPty(self, pty):
ttyname = os.ttyname(pty)
- self.feed_dbg("set inferior-tty %s\n" % (ttyname,))
+ self.feed_child("set inferior-tty %s\n" % (ttyname,))
- def setDbgRun(self):
+ def setRun(self):
+
+ his = self.getHistoryLen()
argv = string.join(string.split(self.clientCmd)[1:])
- self.feed_dbg("run " + argv + "\n")
+ self.feed_child("run " + argv + "\n")
+ return self.waitForActivation(his)
+
+ def setContinue(self):
+ his = self.getHistoryLen()
+ self.feed_child("cont\n");
+ return self.waitForActivation(his)
+
+ def setStepover(self):
+ his = self.getHistoryLen()
+ self.feed_child("next\n");
+ return self.waitForActivation(his)
+
+ def setStepin(self):
+ his = self.getHistoryLen()
+ self.feed_child("step\n");
+ return self.waitForActivation(his)
+
+ def setQuit(self):
+ self.feed_child("quit\n")
+ self.waitForNewline()
+ self.feed_child("y\n");
+
+ def setBreakpoint(self, file, lineno, condition=None):
+ his = self.getHistoryLen()
+ if condition==None:
+ self.feed_child("break %s:%s\n" % (file, str(lineno)))
+ else:
+ self.feed_child("break %s:%s if %s\n" % \
+ (file, str(lineno), condition))
+
+ rx = re.compile("^Breakpoint |^No |^\(gdb\) ")
+ his, response = self.waitForRx(rx, his)
+
+ if response[0:10] == "Breakpoint":
+ return string.split(response)[1].strip()
+
+ if response[0:14] == "No source file":
+ self.feed_child("n\n");
+ return None
+
+ #Wait again for gdb
+ if response[0:5] != "(gdb)":
+ his, response = self.waitForRx(rx,his)
+
+ return None
+
- def setDbgQuit(self):
- self.feed_dbg("quit\n")
- self.waitForDbgNewline()
- self.feed_dbg("y\n");
+ def delBreakpoint(self, breakpoint):
+ self.feed_child("del breakpoint %s\n" % (breakpoint,))
- def setDbgContinue(self):
- self.feed_dbg("cont\n");
+ def getBreakpoints(self):
+ starthis = self.getHistoryLen()
+ self.feed_child("info breakpoints\n")
- def setDbgBreakpoint(self, file, lineno):
- self.feed_dbg("break %s:%d\n" % (file, lineno))
+ rx = re.compile("^\(gdb\) ")
+ endhis, response = self.waitForRx(rx, starthis)
- def getDbgExpression(self, expr):
+
+ rxbp1 = re.compile("^\d+\s+breakpoint")
+ rxbp2 = re.compile("^\tstop only if")
+
+ bpnts = []
+ bplines = self.history[starthis+1:endhis]
+ i = 0
+
+ #Parse the resulting lines
+ while i<len(bplines):
+ line = bplines[i]
+
+ if not rxbp1.search(line):
+ i += 1
+ continue
+
+ splits = string.split(line)
+ no = splits[0]
+ pos = splits[-1]
+ [file,lineno] = string.split(pos,":")
+ cond = None
+
+ if i+1<len(bplines) and rxbp2.search(bplines[i+1]):
+ i +=1
+ line = bplines[i]
+ pre,cond = string.split(line,"if")
+ cond = cond.strip()
+
+ bpnts += [[no, file, lineno, cond]]
+ i += 1
+
+ return bpnts
+
+
+
+ def getExpression(self, expr):
his = self.getHistoryLen()
- self.feed_dbg("print " + expr + "\n")
+ self.feed_child("print " + expr + "\n")
+
+ rx = re.compile("^\(gdb\) $")
+ his, response = self.waitForRx(rx, his)
- rx = re.compile("^\$[1-9][0-9]* = .*$")
- his, response = self.waitForDbgRx(rx, his)
+ answer = self.history[his-1]
- split = string.split(response, "=")
+ if len(string.split(answer, "=")) == 1:
+ return answer.strip()
+
+ split = string.split(answer, "=")
return string.join(split[1:], "=").strip()
+ def waitForActivation(self, his=None):
+
+ self.setActive(False)
+ rx = re.compile("^\(gdb\) $")
+ his, reponse = self.waitForRx(rx,his)
+ self.setActive(True)
+
+ if self.history[his-1][0:2]=="\x1a\x1a":
+ tuples = string.split(self.history[his-1][2:], ":")
+ return tuples[0:2]
+
+ return None
+
+
if __name__ == "__main__":
dbgterm = GdbTerminal(string.join(sys.argv[1:]))
dbgwnd = DbgTerminal.DbgWindow(dbgterm)
- DbgTerminal.launchDebugger(dbgwnd, dbgterm)
+ gtk.main()