eric6/DebugClients/Python/DebugClientBase.py

changeset 7903
827d89937c30
parent 7901
6ff7ccf0cb50
child 7915
e68f5c568aee
diff -r a5248d27c8a9 -r 827d89937c30 eric6/DebugClients/Python/DebugClientBase.py
--- a/eric6/DebugClients/Python/DebugClientBase.py	Sun Dec 20 12:35:26 2020 +0100
+++ b/eric6/DebugClients/Python/DebugClientBase.py	Sun Dec 20 20:13:42 2020 +0100
@@ -20,7 +20,7 @@
 import signal
 import time
 import types
-import importlib
+import importlib.util
 import fnmatch
 
 
@@ -480,7 +480,8 @@
             res = 0
             code = self.__compileFileSource(self.running)
             if code:
-                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False,
+                                    closeSession=False)
 
         elif method == "RequestCoverage":
             from coverage import Coverage
@@ -514,7 +515,8 @@
             if code:
                 self.running = sys.argv[0]
                 self.cover.start()
-                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False,
+                                    closeSession=False)
                 self.cover.stop()
                 self.cover.save()
         
@@ -564,7 +566,7 @@
                     self.__unhandled_exception(*excinfo)
                 
                 self.prof.save()
-                self.progTerminated(res)
+                self.progTerminated(res, closeSession=False)
         
         elif method == "ExecuteStatement":
             if self.buffer:
@@ -823,14 +825,10 @@
         elif method == "RequestUTPrepare":
             if params["syspath"]:
                 sys.path = params["syspath"] + sys.path
-            sys.path.insert(
-                0, os.path.dirname(os.path.abspath(params["filename"])))
             top_level_dir = None
             if params["workdir"]:
                 os.chdir(params["workdir"])
                 top_level_dir = params["workdir"]
-            else:
-                os.chdir(sys.path[0])
             
             # set the system exception handling function to ensure, that
             # we report on all unhandled exceptions
@@ -844,6 +842,8 @@
                     discoveryStart = params["discoverystart"]
                     if not discoveryStart:
                         discoveryStart = params["workdir"]
+                    sys.path.insert(
+                        0, os.path.abspath(discoveryStart))
                     if params["testcases"]:
                         self.test = testLoader.loadTestsFromNames(
                             params["testcases"])
@@ -851,6 +851,10 @@
                         self.test = testLoader.discover(
                             discoveryStart, top_level_dir=top_level_dir)
                 else:
+                    sys.path.insert(
+                        0,
+                        os.path.dirname(os.path.abspath(params["filename"]))
+                    )
                     if params["filename"]:
                         spec = importlib.util.spec_from_file_location(
                             params["testname"], params["filename"])
@@ -913,7 +917,7 @@
                 sys.setprofile(None)
                 self.mainThread.run(
                     "result = self.test.run(self.testResult)\n",
-                    localsDict=locals_)
+                    localsDict=locals_, closeSession=False)
                 result = locals_["result"]
             else:
                 result = self.test.run(self.testResult)
@@ -1420,7 +1424,7 @@
         """
         return self.running
 
-    def progTerminated(self, status, message=""):
+    def progTerminated(self, status, message="", closeSession=True):
         """
         Public method to tell the debugger that the program has terminated.
         
@@ -1428,6 +1432,8 @@
         @type int
         @param message status message
         @type str
+        @param closeSession flag indicating to close the debugger session
+        @type bool
         """
         if status is None:
             status = 0
@@ -1450,7 +1456,8 @@
         # reset coding
         self.__coding = self.defaultCoding
         
-        self.sessionClose(False)
+        if closeSession:
+            self.sessionClose(False)
 
     def __dumpVariables(self, frmnr, scope, filterList):
         """
@@ -2105,7 +2112,6 @@
         self.passive = passive
         if passive:
             self.sendPassiveStartup(self.running, exceptions)
-        self.__interact()
         
         self.attachThread(mainThread=True)
         self.mainThread.tracePythonLibs(tracePython)
@@ -2152,7 +2158,7 @@
         """
         self.startDebugger(scriptname, enableTrace=False)
         res = self.mainThread.runcall(func, *args)
-        self.progTerminated(res)
+        self.progTerminated(res, closeSession=False)
         return res
     
     def __resolveHost(self, host):

eric ide

mercurial