Example #1
0
class GDBServer(Thread):
    def __init__(self,process):
        Thread.__init__(self)
        self.working = True
        self.cmdcondition = threading.Condition()
        self.cmdSingle = threading.Condition()
        self.process = process
        self.interpreter = GDBInterpreter()
        self.output = ''
        self.currentcmd = None
        self.log = Logger("GDBServer")
        self.completevisitor = CompleteVisitor()

    def run(self):
        lineCondition = threading.Condition()
        while(self.working):
            line = self.process.stdout.readline()
            if platform.system() == 'Windows':
                line = line.replace(os.sep + os.sep + '', os.sep)
                line = line.replace('/', os.sep)
            self.log.info(line)
            self.output += line
            if self.currentcmd != None and not self.currentcmd.isComplete():
                self.completevisitor.setoutput(self.output)
                self.currentcmd.accept(self.completevisitor)

            if self.currentcmd != None and self.currentcmd.isComplete():
                self.cmdcondition.acquire()
                self.cmdcondition.notify()
                self.cmdcondition.release()
    
    def send(self,cmd):
        self.cmdSingle.acquire()
        self.output = ''
        self.currentcmd = cmd
        self.log.info("Write -> " + str(cmd.getValue()))
        self.cmdcondition.acquire()
        self.process.stdin.write(cmd.getValue())
        self.cmdcondition.wait(15)

        try:
            if self.currentcmd.isComplete() == True:
                self.interpreter.parse(self.currentcmd,self.output.split('\n')) 
        finally:
            self.cmdcondition.release()
            self.cmdSingle.release()


    # FIXME: Start gdb without confirmation questions
    def stopserver(self):
        self.output = ''
        self.process.stdin.write("quit\n")
        self.working = False
Example #2
0
class GDBServer(Thread):
    def __init__(self, process):
        Thread.__init__(self)
        self.working = True
        self.cmdcondition = threading.Condition()
        self.cmdSingle = threading.Condition()
        self.process = process
        self.interpreter = GDBInterpreter()
        self.output = ''
        self.currentcmd = None
        self.log = Logger("GDBServer")
        self.completevisitor = CompleteVisitor()

    def run(self):
        lineCondition = threading.Condition()
        while (self.working):
            line = self.process.stdout.readline()
            if platform.system() == 'Windows':
                line = line.replace(os.sep + os.sep + '', os.sep)
                line = line.replace('/', os.sep)
            self.log.info(line)
            self.output += line
            if self.currentcmd != None and not self.currentcmd.isComplete():
                self.completevisitor.setoutput(self.output)
                self.currentcmd.accept(self.completevisitor)

            if self.currentcmd != None and self.currentcmd.isComplete():
                self.cmdcondition.acquire()
                self.cmdcondition.notify()
                self.cmdcondition.release()

    def send(self, cmd):
        self.cmdSingle.acquire()
        self.output = ''
        self.currentcmd = cmd
        self.log.info("Write -> " + str(cmd.getValue()))
        self.cmdcondition.acquire()
        self.process.stdin.write(cmd.getValue())
        self.cmdcondition.wait(15)

        try:
            if self.currentcmd.isComplete() == True:
                self.interpreter.parse(self.currentcmd,
                                       self.output.split('\n'))
        finally:
            self.cmdcondition.release()
            self.cmdSingle.release()

    # FIXME: Start gdb without confirmation questions
    def stopserver(self):
        self.output = ''
        self.process.stdin.write("quit\n")
        self.working = False