self.feed_child("run " + argv + "\n")
return self.waitForActivation(his)
-
def setContinue(self):
his = self.getHistoryLen()
self.feed_child("cont\n");
self.feed_child("break %s:%s if %s\n" % \
(file, str(lineno), condition))
- rx = re.compile("^Breakpoint |^No|^\(gdb\) ")
+ rx = re.compile("^Breakpoint |^No |^\(gdb\) ")
his, response = self.waitForRx(rx, his)
- print his, response
-
if response[0:10] == "Breakpoint":
return string.split(response)[1].strip()
- if response[0:5] == "(gdb)":
- return None
+
if response[0:14] == "No source file":
self.feed_child("n\n");
return None
- if response[0:3] == "No ":
- return None
-
- return NotImplementedError()
+
+ #Wait again for gdb
+ if response[0:5] != "(gdb)":
+ his, response = self.waitForRx(rx,his)
+
+ return None
+
def delBreakpoint(self, breakpoint):
self.feed_child("del breakpoint %s\n" % (breakpoint,))
endhis, response = self.waitForRx(rx, starthis)
- rxbp1 = re.compile("^\d+\s+breakpoint")
- rxbp2 = re.compile("^\tstop only if")
+ rxbp = re.compile("^\d+\s+breakpoint")
+ rxpos = re.compile("^.* at \S+:\d+$")
+ rxcond = re.compile("^\tstop only if")
bpnts = []
bplines = self.history[starthis+1:endhis]
while i<len(bplines):
line = bplines[i]
- if not rxbp1.search(line):
+ if not rxbp.search(line):
i += 1
continue
+
+ #Get number of breakpoint
+ no = string.split(line)[0]
+
+ #This line does not contain the file!
+ if not rxpos.search(line):
+ i += 1
+ line = bplines[i]
- splits = string.split(line)
- no = splits[0]
- pos = splits[-1]
+ pos = string.split(line)[-1]
[file,lineno] = string.split(pos,":")
cond = None
- if i+1<len(bplines) and rxbp2.search(bplines[i+1]):
+ if i+1<len(bplines) and rxcond.search(bplines[i+1]):
i +=1
line = bplines[i]
pre,cond = string.split(line,"if")
return string.join(split[1:], "=").strip()
- def waitForActivation(self, his=None):
+ def waitForActivation(self, starthis=None):
+
+ if starthis == None:
+ starthis = self.getHistoryLen()
self.setActive(False)
rx = re.compile("^\(gdb\) $")
- his, reponse = self.waitForRx(rx,his)
+ endhis, reponse = self.waitForRx(rx,starthis)
self.setActive(True)
- if self.history[his-1][0:2]=="\x1a\x1a":
- tuples = string.split(self.history[his-1][2:], ":")
- return tuples[0:2]
+ for his in reversed(range(starthis+1,endhis)):
+ if self.history[his][0:2]=="\x1a\x1a":
+ tuples = string.split(self.history[his][2:], ":")
+ return tuples[0:2]
return None