projects
/
pygdb.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
show backtrace in source view
[pygdb.git]
/
GdbTerminal.py
diff --git
a/GdbTerminal.py
b/GdbTerminal.py
old mode 100755
(executable)
new mode 100644
(file)
index
579849d
..
5be9c05
--- a/
GdbTerminal.py
+++ b/
GdbTerminal.py
@@
-43,9
+43,7
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
def setPty(self, pty):
ttyname = os.ttyname(pty)
def setPty(self, pty):
ttyname = os.ttyname(pty)
- len = self.getHistoryLen()
- self.feed_child("set inferior-tty %s\n" % (ttyname,))
- self.waitForPrompt(len)
+ self.__getAnswerFromCmd("set inferior-tty %s\n" % (ttyname,))
def setBreakpoint(self, file, lineno, condition=None):
his = self.getHistoryLen()
def setBreakpoint(self, file, lineno, condition=None):
his = self.getHistoryLen()
@@
-74,22
+72,18
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
def delBreakpoint(self, breakpoint):
def delBreakpoint(self, breakpoint):
- his = self.getHistoryLen()
- self.feed_child("del breakpoint %s\n" % (breakpoint,))
- self.waitForPrompt(his)
+ self.__getAnswerFromCmd("del breakpoint %s\n" % (breakpoint,))
+
def getBreakpoints(self):
def getBreakpoints(self):
- starthis = self.getHistoryLen()
- self.feed_child("info breakpoints\n")
- endhis, response = self.waitForPrompt(starthis)
+ bplines = self.__getAnswerFromCmd("info breakpoints\n")
rxbp = re.compile("^\d+\s+breakpoint")
rxpos = re.compile("^.* at \S+:\d+$")
rxcond = re.compile("^\tstop only if")
bpnts = []
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]
- i = 0
+ i = 1
#Parse the resulting lines
while i<len(bplines):
#Parse the resulting lines
while i<len(bplines):
@@
-104,8
+98,7
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
#This line does not contain the file!
if not rxpos.search(line):
#This line does not contain the file!
if not rxpos.search(line):
- i += 1
- line = bplines[i]
+ continue
pos = string.split(line)[-1]
[file,lineno] = string.split(pos,":")
pos = string.split(line)[-1]
[file,lineno] = string.split(pos,":")
@@
-114,7
+107,7
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
if i+1<len(bplines) and rxcond.search(bplines[i+1]):
i +=1
line = bplines[i]
if i+1<len(bplines) and rxcond.search(bplines[i+1]):
i +=1
line = bplines[i]
-
pre,cond = string.split(line,"if
")
+
cond = string.join(string.split(line," if ")[1:], " if
")
cond = cond.strip()
bpnts += [[no, file, lineno, cond]]
cond = cond.strip()
bpnts += [[no, file, lineno, cond]]
@@
-125,11
+118,8
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
def getExpression(self, expr):
def getExpression(self, expr):
-
- his = self.getHistoryLen()
- self.feed_child("print " + expr + "\n")
- his, response = self.waitForPrompt(his)
- answer = self.history[his-1]
+ answer = self.__getAnswerFromCmd("print " + expr + "\n")
+ answer = answer[-1]
if len(string.split(answer, "=")) == 1:
return answer.strip()
if len(string.split(answer, "=")) == 1:
return answer.strip()
@@
-137,11
+127,26
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
split = string.split(answer, "=")
return string.join(split[1:], "=").strip()
split = string.split(answer, "=")
return string.join(split[1:], "=").strip()
+
+ def listCodeSnippet(self):
+ answ = self.__getAnswerFromCmd("list\n")
+ return string.join(answ, "\n")
+
+ def getBacktrace(self):
+ answ = self.__getAnswerFromCmd("bt\n")
+ return string.join(answ, "\n")
def waitForPrompt(self, his):
rx = "^\(gdb\)"
return self.waitForRx(rx,his)
def waitForPrompt(self, his):
rx = "^\(gdb\)"
return self.waitForRx(rx,his)
+ def __getAnswerFromCmd(self, cmd):
+ starthis = self.getHistoryLen()
+ self.feed_child(cmd)
+ endhis, response = self.waitForPrompt(starthis)
+
+ return self.history[starthis:endhis]
+
def testForActivity(self, his):
"""Test whether debugger got active again"""
def testForActivity(self, his):
"""Test whether debugger got active again"""
@@
-155,11
+160,14
@@
class GdbTerminal (DbgTerminal.DbgTerminal):
if string.find(line, "Program exited") == 0:
code = string.split(line)[-1]
if string.find(line, "Program exited") == 0:
code = string.split(line)[-1]
- code = code[1:-1]
codeno = 0
codeno = 0
- for c in code:
- codeno = codeno*8 + int(c)
+
+ #Parse the octal number
+ if code[0] == "O":
+ code = code[1:-1]
+ for c in code:
+ codeno = codeno*8 + int(c)
return "exited", codeno
return "exited", codeno