573 exec(code, self.debugMod.__dict__) |
573 exec(code, self.debugMod.__dict__) |
574 except SystemExit as exc: |
574 except SystemExit as exc: |
575 res = exc.code |
575 res = exc.code |
576 atexit._run_exitfuncs() |
576 atexit._run_exitfuncs() |
577 self.writestream.flush() |
577 self.writestream.flush() |
578 self.progTerminated(res, exit=True) |
578 self.progTerminated(res) |
579 return |
579 return |
580 |
580 |
581 if cmd == DebugProtocol.RequestProfile: |
581 if cmd == DebugProtocol.RequestProfile: |
582 sys.setprofile(None) |
582 sys.setprofile(None) |
583 import PyProfile |
583 import PyProfile |
619 except SystemExit as exc: |
619 except SystemExit as exc: |
620 res = exc.code |
620 res = exc.code |
621 atexit._run_exitfuncs() |
621 atexit._run_exitfuncs() |
622 self.prof.save() |
622 self.prof.save() |
623 self.writestream.flush() |
623 self.writestream.flush() |
624 self.progTerminated(res, exit=True) |
624 self.progTerminated(res) |
625 return |
625 return |
626 |
626 |
627 if cmd == DebugProtocol.RequestCoverage: |
627 if cmd == DebugProtocol.RequestCoverage: |
628 from coverage import coverage |
628 from coverage import coverage |
629 sys.argv = [] |
629 sys.argv = [] |
1048 self.writestream.write(s) |
1048 self.writestream.write(s) |
1049 self.writestream.flush() |
1049 self.writestream.flush() |
1050 |
1050 |
1051 def __interact(self): |
1051 def __interact(self): |
1052 """ |
1052 """ |
1053 Private method to Interact with the debugger. |
1053 Private method to Interact with the debugger. |
1054 """ |
1054 """ |
1055 global DebugClientInstance |
1055 global DebugClientInstance |
1056 |
1056 |
1057 self.setDescriptors(self.readstream, self.writestream) |
1057 self.setDescriptors(self.readstream, self.writestream) |
1058 DebugClientInstance = self |
1058 DebugClientInstance = self |
1072 self.pollingDisabled = disablePolling |
1072 self.pollingDisabled = disablePolling |
1073 |
1073 |
1074 while self.eventExit is None: |
1074 while self.eventExit is None: |
1075 wrdy = [] |
1075 wrdy = [] |
1076 |
1076 |
|
1077 if self.writestream.nWriteErrors > self.writestream.maxtries: |
|
1078 break |
|
1079 |
1077 if AsyncPendingWrite(self.writestream): |
1080 if AsyncPendingWrite(self.writestream): |
1078 wrdy.append(self.writestream) |
1081 wrdy.append(self.writestream) |
1079 |
1082 |
1080 if AsyncPendingWrite(self.errorstream): |
1083 if AsyncPendingWrite(self.errorstream): |
1081 wrdy.append(self.errorstream) |
1084 wrdy.append(self.errorstream) |
1305 |
1308 |
1306 @return flag indicating a running debug session (boolean) |
1309 @return flag indicating a running debug session (boolean) |
1307 """ |
1310 """ |
1308 return self.running |
1311 return self.running |
1309 |
1312 |
1310 def progTerminated(self, status, exit=False): |
1313 def progTerminated(self, status): |
1311 """ |
1314 """ |
1312 Public method to tell the debugger that the program has terminated. |
1315 Public method to tell the debugger that the program has terminated. |
1313 |
1316 |
1314 @param status return status |
1317 @param status return status |
1315 @param exit flag indicating to perform a sys.exit() |
1318 @type int |
1316 @type bool |
|
1317 """ |
1319 """ |
1318 if status is None: |
1320 if status is None: |
1319 status = 0 |
1321 status = 0 |
1320 else: |
1322 else: |
1321 try: |
1323 try: |
1325 |
1327 |
1326 if self.running: |
1328 if self.running: |
1327 self.set_quit() |
1329 self.set_quit() |
1328 self.running = None |
1330 self.running = None |
1329 self.write('{0}{1:d}\n'.format(DebugProtocol.ResponseExit, status)) |
1331 self.write('{0}{1:d}\n'.format(DebugProtocol.ResponseExit, status)) |
1330 if exit: |
|
1331 self.writestream.close(True) |
|
1332 sys.exit(status) |
|
1333 |
1332 |
1334 # reset coding |
1333 # reset coding |
1335 self.__coding = self.defaultCoding |
1334 self.__coding = self.defaultCoding |
1336 |
1335 |
1337 def __dumpVariables(self, frmnr, scope, filter): |
1336 def __dumpVariables(self, frmnr, scope, filter): |