582 execfile(sys.argv[0], self.debugMod.__dict__) |
582 execfile(sys.argv[0], self.debugMod.__dict__) |
583 except SystemExit as exc: |
583 except SystemExit as exc: |
584 res = exc.code |
584 res = exc.code |
585 atexit._run_exitfuncs() |
585 atexit._run_exitfuncs() |
586 self.writestream.flush() |
586 self.writestream.flush() |
587 self.progTerminated(res, exit=True) |
587 self.progTerminated(res) |
588 return |
588 return |
589 |
589 |
590 if cmd == DebugProtocol.RequestCoverage: |
590 if cmd == DebugProtocol.RequestCoverage: |
591 from coverage import coverage |
591 from coverage import coverage |
592 sys.argv = [] |
592 sys.argv = [] |
663 except SystemExit as exc: |
663 except SystemExit as exc: |
664 res = exc.code |
664 res = exc.code |
665 atexit._run_exitfuncs() |
665 atexit._run_exitfuncs() |
666 self.prof.save() |
666 self.prof.save() |
667 self.writestream.flush() |
667 self.writestream.flush() |
668 self.progTerminated(res, exit=True) |
668 self.progTerminated(res) |
669 return |
669 return |
670 |
670 |
671 if cmd == DebugProtocol.RequestShutdown: |
671 if cmd == DebugProtocol.RequestShutdown: |
672 self.sessionClose() |
672 self.sessionClose() |
673 return |
673 return |
1045 self.writestream.write(s) |
1045 self.writestream.write(s) |
1046 self.writestream.flush() |
1046 self.writestream.flush() |
1047 |
1047 |
1048 def __interact(self): |
1048 def __interact(self): |
1049 """ |
1049 """ |
1050 Private method to Interact with the debugger. |
1050 Private method to Interact with the debugger. |
1051 """ |
1051 """ |
1052 global DebugClientInstance |
1052 global DebugClientInstance |
1053 |
1053 |
1054 self.setDescriptors(self.readstream, self.writestream) |
1054 self.setDescriptors(self.readstream, self.writestream) |
1055 DebugClientInstance = self |
1055 DebugClientInstance = self |
1069 self.pollingDisabled = disablePolling |
1069 self.pollingDisabled = disablePolling |
1070 |
1070 |
1071 while self.eventExit is None: |
1071 while self.eventExit is None: |
1072 wrdy = [] |
1072 wrdy = [] |
1073 |
1073 |
|
1074 if self.writestream.nWriteErrors > self.writestream.maxtries: |
|
1075 break |
|
1076 |
1074 if AsyncPendingWrite(self.writestream): |
1077 if AsyncPendingWrite(self.writestream): |
1075 wrdy.append(self.writestream) |
1078 wrdy.append(self.writestream) |
1076 |
1079 |
1077 if AsyncPendingWrite(self.errorstream): |
1080 if AsyncPendingWrite(self.errorstream): |
1078 wrdy.append(self.errorstream) |
1081 wrdy.append(self.errorstream) |
1302 |
1305 |
1303 @return flag indicating a running debug session (boolean) |
1306 @return flag indicating a running debug session (boolean) |
1304 """ |
1307 """ |
1305 return self.running |
1308 return self.running |
1306 |
1309 |
1307 def progTerminated(self, status, exit=False): |
1310 def progTerminated(self, status): |
1308 """ |
1311 """ |
1309 Public method to tell the debugger that the program has terminated. |
1312 Public method to tell the debugger that the program has terminated. |
1310 |
1313 |
1311 @param status return status |
1314 @param status return status |
1312 @param exit flag indicating to perform a sys.exit() |
1315 @type int |
1313 @type bool |
|
1314 """ |
1316 """ |
1315 if status is None: |
1317 if status is None: |
1316 status = 0 |
1318 status = 0 |
1317 else: |
1319 else: |
1318 try: |
1320 try: |
1322 |
1324 |
1323 if self.running: |
1325 if self.running: |
1324 self.set_quit() |
1326 self.set_quit() |
1325 self.running = None |
1327 self.running = None |
1326 self.write('%s%d\n' % (DebugProtocol.ResponseExit, status)) |
1328 self.write('%s%d\n' % (DebugProtocol.ResponseExit, status)) |
1327 if exit: |
|
1328 self.writestream.close(1) |
|
1329 sys.exit(status) |
|
1330 |
1329 |
1331 # reset coding |
1330 # reset coding |
1332 self.__coding = self.defaultCoding |
1331 self.__coding = self.defaultCoding |
1333 |
1332 |
1334 def __dumpVariables(self, frmnr, scope, filter): |
1333 def __dumpVariables(self, frmnr, scope, filter): |