X-Git-Url: https://git.sthu.org/?p=pygdb.git;a=blobdiff_plain;f=GdbTerminal.py;h=abf01e34776b597382c063ddd875c872472d2ea7;hp=5be9c05fd165108449fd97150b6712762ee67350;hb=7c7da5bcd494d7a53b40952232a889f59c4dfbf2;hpb=382465d6c2f07b99c0263314405d1d8411072d23 diff --git a/GdbTerminal.py b/GdbTerminal.py index 5be9c05..abf01e3 100644 --- a/GdbTerminal.py +++ b/GdbTerminal.py @@ -36,6 +36,22 @@ class GdbTerminal (DbgTerminal.DbgTerminal): def setStepin(self): self.feed_child("step\n"); + def setStepout(self): + bt = self.getBacktrace() + + if len(bt) < 2: + self.setContinue() + + else: + #Get the second line + sec = bt[1] + + #Check if it is a backtrace line + if re.compile("^#1\s+.*\s\S+:\d+$").search(sec): + pos = string.split(sec)[-1] + self.feed_child("advance %s\n" % pos) + + def setQuit(self): self.feed_child("quit\n") self.waitForNewline() @@ -79,8 +95,8 @@ class GdbTerminal (DbgTerminal.DbgTerminal): bplines = self.__getAnswerFromCmd("info breakpoints\n") rxbp = re.compile("^\d+\s+breakpoint") - rxpos = re.compile("^.* at \S+:\d+$") - rxcond = re.compile("^\tstop only if") + rxpos = re.compile("^.*at \S+:\d+$") + rxcond = re.compile("^\s+stop only if") bpnts = [] i = 1 @@ -129,12 +145,10 @@ class GdbTerminal (DbgTerminal.DbgTerminal): def listCodeSnippet(self): - answ = self.__getAnswerFromCmd("list\n") - return string.join(answ, "\n") + return self.__getAnswerFromCmd("list\n") def getBacktrace(self): - answ = self.__getAnswerFromCmd("bt\n") - return string.join(answ, "\n") + return self.__getAnswerFromCmd("bt\n") def waitForPrompt(self, his): rx = "^\(gdb\)" @@ -186,10 +200,12 @@ class GdbTerminal (DbgTerminal.DbgTerminal): return "continued", None if string.find(line, "\x1a\x1a") == 0: - rxcont = re.compile("^\(gdb\)\s+(cont|step|next|stepi|nexti)") + rxcont = re.compile("^\(gdb\)\s+(cont|step|next|stepi|nexti|advance)") if rxcont.search(self.history[his-1]): return "stepped", None + if rxcont.search(self.history[his-2]): + return "stepped", None return None