X-Git-Url: https://git.sthu.org/?p=pygdb.git;a=blobdiff_plain;f=GdbTerminal.py;h=6218d64780e18e7b2e0f515e3ecf7d90bd34ac3a;hp=5be9c05fd165108449fd97150b6712762ee67350;hb=32cf025183d25d3ab1f8e398ef391f6b3616d980;hpb=382465d6c2f07b99c0263314405d1d8411072d23 diff --git a/GdbTerminal.py b/GdbTerminal.py index 5be9c05..6218d64 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() @@ -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