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()
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
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
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 setUp(self): self.seq = range(10) self.interpreter = GDBInterpreter()
class GDBInterpreterTestCase(unittest.TestCase): def setUp(self): self.seq = range(10) self.interpreter = GDBInterpreter() def _testBreak(self, breakpoint, number, breakpoint_type, address, function, line, source_file): self.assertEquals(breakpoint.getNumber(), number) self.assertEquals(breakpoint.getType(), breakpoint_type) self.assertEquals(breakpoint.getAddress(), address) self.assertEquals(breakpoint.getFunction(), function) self.assertEquals(breakpoint.getLineNumber(), line) self.assertEquals(breakpoint.getSourceFile(), source_file) def testParse_AddBreakpoint(self): #"break main" handle = open('gdblib/test_files/add-breakpoint.dat', 'r') content = handle.readlines() handle.close() breakpoint = self.interpreter.parseAddBreakpointCommand(content) self._testBreak(breakpoint, 1, '', '0x498ea1', '', 169, 'src/main.c') def testParse_AddBreakpoint_NoSourceError(self): #"break main" handle = open('gdblib/test_files/add-breakpoint-no-source.dat', 'r') content = handle.readlines() handle.close() self.assertRaises(NoSourceFileError, self.interpreter.parseAddBreakpointCommand, content) def testParse_AddBreakpoint_NoLineError(self): #"break main" handle = open('gdblib/test_files/add-breakpoint-no-line.dat', 'r') content = handle.readlines() handle.close() self.assertRaises(NoLineError, self.interpreter.parseAddBreakpointCommand, content) def testParse_Info_Functions(self): #"info functions" self.assertEquals(6, 6) def testParse_Info_Break(self): #"info breakpoints" handle = open("gdblib/test_files/info_break.dat", "r") filecontent = handle.readlines() handle.close() breaks = self.interpreter.parseInfoBreak(filecontent) self.assertEqual(2, len(breaks)) self._testBreak(breaks[0], 1, "breakpoint", "0x98ea1", "main", 169, "src/main.c") self._testBreak(breaks[1], 2, "breakpoint", "0x98e77", "main", 192, "src/main.c") def testParse_Info_Break_Windows(self): #"info breakpoints" handle = open("gdblib/test_files/info_break_windows.dat", "r") filecontent = handle.readlines() handle.close() breaks = self.interpreter.parseInfoBreak(filecontent) self.assertEqual(2, len(breaks)) self._testBreak(breaks[0], 1, "breakpoint", "0x98ea1", "main", 169, "src\main.c") self._testBreak(breaks[1], 2, "breakpoint", "0x98e77", "main", 192, "src\main.c") def testParse_ListSourceFiles(self): handle = open("gdblib/test_files/list_source_files.dat", "r") filecontent = handle.readlines() handle.close() files = self.interpreter.parseListSourceFiles(filecontent) self.assertEquals(2, len(files)) self.assertEquals('main.c', files[0]['file']) self.assertEquals( '/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/main.c', files[0]['fullname']) self.assertEquals('module1/functions.c', files[1]['file']) self.assertEquals( '/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/module1/functions.c', files[1]['fullname']) def testParse_Print(self): handle = open("gdblib/test_files/print.dat", "r") filecontent = handle.readlines() handle.close() value = self.interpreter.parsePrintCommand(filecontent) self.assertEquals('$1 = 6', value) def testParse_Print_Incorrect(self): handle = open("gdblib/test_files/print-incorrect.dat", "r") filecontent = handle.readlines() handle.close() value = self.interpreter.parsePrintCommand(filecontent) self.assertEquals('No symbol \\\"e\\\" in current context.\\n', value) def testParse_Step_Next(self): handle = open("gdblib/test_files/next.dat", "r") content = handle.readlines() handle.close() location = self.interpreter.parseStepCommand(content) self.assertEquals('print_point', location['func']) self.assertEquals('module1/functions.c', location['file']) self.assertEquals( '/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/module1/functions.c', location['fullname']) self.assertEquals(13, location['line']) def testParse_SymbolFile(self): handle = open("gdblib/test_files/symbol-file.dat", "r") content = handle.readlines() handle.close() symbol = self.interpreter.parseSymbolFileCommand(content) self.assertEquals( '/home/lobo/Programming/projects/python/gdblib/gdblib/testapplication/app', symbol) def testParse_TargetRemote(self): handle = open('gdblib/test_files/target-remote-timeout.dat', 'r') content = handle.readlines() handle.close() self.assertTrue(self.interpreter.parseTargetRemoteCommand(content))
class GDBInterpreterTestCase(unittest.TestCase): def setUp(self): self.seq = range(10) self.interpreter = GDBInterpreter() def _testBreak(self, breakpoint, number, breakpoint_type, address, function, line, source_file): self.assertEquals(breakpoint.getNumber(), number) self.assertEquals(breakpoint.getType(), breakpoint_type) self.assertEquals(breakpoint.getAddress(), address) self.assertEquals(breakpoint.getFunction(), function) self.assertEquals(breakpoint.getLineNumber(), line) self.assertEquals(breakpoint.getSourceFile(), source_file) def testParse_AddBreakpoint(self): #"break main" handle = open('gdblib/test_files/add-breakpoint.dat','r') content = handle.readlines() handle.close() breakpoint = self.interpreter.parseAddBreakpointCommand(content) self._testBreak(breakpoint, 1,'', '0x498ea1', '', 169, 'src/main.c') def testParse_AddBreakpoint_NoSourceError(self): #"break main" handle = open('gdblib/test_files/add-breakpoint-no-source.dat','r') content = handle.readlines() handle.close() self.assertRaises(NoSourceFileError, self.interpreter.parseAddBreakpointCommand, content) def testParse_AddBreakpoint_NoLineError(self): #"break main" handle = open('gdblib/test_files/add-breakpoint-no-line.dat','r') content = handle.readlines() handle.close() self.assertRaises(NoLineError, self.interpreter.parseAddBreakpointCommand, content) def testParse_Info_Functions(self): #"info functions" self.assertEquals(6,6) def testParse_Info_Break(self): #"info breakpoints" handle = open("gdblib/test_files/info_break.dat","r") filecontent = handle.readlines() handle.close() breaks = self.interpreter.parseInfoBreak(filecontent) self.assertEqual(2, len(breaks)) self._testBreak(breaks[0], 1, "breakpoint", "0x98ea1", "main", 169, "src/main.c") self._testBreak(breaks[1], 2, "breakpoint", "0x98e77", "main", 192, "src/main.c") def testParse_Info_Break_Windows(self): #"info breakpoints" handle = open("gdblib/test_files/info_break_windows.dat","r") filecontent = handle.readlines() handle.close() breaks = self.interpreter.parseInfoBreak(filecontent) self.assertEqual(2, len(breaks)) self._testBreak(breaks[0], 1, "breakpoint", "0x98ea1", "main", 169, "src\main.c") self._testBreak(breaks[1], 2, "breakpoint", "0x98e77", "main", 192, "src\main.c") def testParse_ListSourceFiles(self): handle = open("gdblib/test_files/list_source_files.dat", "r") filecontent = handle.readlines() handle.close() files = self.interpreter.parseListSourceFiles(filecontent) self.assertEquals(2, len(files)) self.assertEquals('main.c',files[0]['file']) self.assertEquals('/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/main.c',files[0]['fullname']) self.assertEquals('module1/functions.c',files[1]['file']) self.assertEquals('/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/module1/functions.c',files[1]['fullname']) def testParse_Print(self): handle = open("gdblib/test_files/print.dat", "r") filecontent = handle.readlines() handle.close() value = self.interpreter.parsePrintCommand(filecontent) self.assertEquals('$1 = 6', value) def testParse_Print_Incorrect(self): handle = open("gdblib/test_files/print-incorrect.dat", "r") filecontent = handle.readlines() handle.close() value = self.interpreter.parsePrintCommand(filecontent) self.assertEquals('No symbol \\\"e\\\" in current context.\\n', value) def testParse_Step_Next(self): handle = open("gdblib/test_files/next.dat", "r") content = handle.readlines() handle.close() location = self.interpreter.parseStepCommand(content) self.assertEquals('print_point', location['func']) self.assertEquals('module1/functions.c', location['file']) self.assertEquals('/home/lobo/programming/projects/python/gdb_frontend/test/org/qdebug/gdb/testapplication/module1/functions.c', location['fullname']) self.assertEquals(13, location['line']) def testParse_SymbolFile(self): handle = open("gdblib/test_files/symbol-file.dat", "r") content = handle.readlines() handle.close() symbol = self.interpreter.parseSymbolFileCommand(content) self.assertEquals('/home/lobo/Programming/projects/python/gdblib/gdblib/testapplication/app', symbol) def testParse_TargetRemote(self): handle = open('gdblib/test_files/target-remote-timeout.dat', 'r') content = handle.readlines() handle.close() self.assertTrue(self.interpreter.parseTargetRemoteCommand(content))