src/eric7/DebugClients/Python/DebugBase.py

Sat, 20 Apr 2024 18:01:36 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 20 Apr 2024 18:01:36 +0200
branch
eric7
changeset 10683
779cda568acb
parent 10542
e46910b0ce73
child 10979
960fe726594c
permissions
-rw-r--r--

Changed the source code and the source code documentation to improve the indication of unused method/function arguments.

0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10423
diff changeset
3 # Copyright (c) 2002 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
7 Module implementing the debug base class which based originally on bdb.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
10 import _thread
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import atexit
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
12 import contextlib
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
13 import ctypes
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
14 import dis
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import inspect
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
16 import os
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
17 import sys
5044
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
18 import time
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
19 import types
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
21 from BreakpointWatch import Breakpoint, Watch
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9462
diff changeset
22 from DebugUtilities import formatargvalues, getargvalues
5179
5f56410e7624 Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5178
diff changeset
23
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 gRecursionLimit = 64
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
7904
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
26 try:
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
27 GENERATOR_AND_COROUTINE_FLAGS = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
28 inspect.CO_GENERATOR | inspect.CO_COROUTINE | inspect.CO_ASYNC_GENERATOR
7904
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
29 )
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
30 except AttributeError:
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
31 # Python < 3.7
0424ebe2d3b1 DebugBase: fixed an issue with Python < 3.7.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7903
diff changeset
32 GENERATOR_AND_COROUTINE_FLAGS = inspect.CO_GENERATOR
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
33
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
34
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 def printerr(s):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Module function used for debugging the debug client.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param s data to be printed
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
40 @type str
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42 sys.__stderr__.write("{0!s}\n".format(s))
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 sys.__stderr__.flush()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
45
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 def setRecursionLimit(limit):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 Module function to set the recursion limit.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
49
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
50 @param limit recursion limit
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
51 @type int
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 global gRecursionLimit
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 gRecursionLimit = limit
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
56
8207
d359172d11be Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7986
diff changeset
57 class DebugBase:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 Class implementing base class of the debugger.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
61 Provides methods for the 'owning' client to call to step etc.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
63
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
64 lib = os.path.dirname(inspect.__file__)
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
65 # tuple required because it's accessed a lot of times by startswith method
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
66 pathsToSkip = ("<", os.path.dirname(__file__), inspect.__file__[:-1])
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
67 filesToSkip = {}
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
68
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
69 # cache for fixed file names
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
70 _fnCache = {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71
5667
86554f131048 Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5659
diff changeset
72 # Stop all timers, when greenlets are used
5674
a0ad2dcb27f9 Corrected some translations related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5667
diff changeset
73 pollTimerEnabled = True
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
74
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 def __init__(self, dbgClient):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @param dbgClient the owning client
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
80 @type DebugClient
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self._dbgClient = dbgClient
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
83
5209
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
84 # Some informations about the thread
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
85 self.isMainThread = False
5206
997064ba25d6 Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5205
diff changeset
86 self.quitting = False
5208
aa8045780ce4 Make attachThread and dumpThreadList runnable again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5207
diff changeset
87 self.id = -1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
88 self.name = ""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
89
8964
29344a31ee2a Implemented a fix for issue422 caused by an incomplete API of DebuggerInterfaceNone.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8918
diff changeset
90 self.tracePythonLibs(False)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
92 # Special handling of a recursion error
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
93 self.skipFrames = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94
5206
997064ba25d6 Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5205
diff changeset
95 self.isBroken = False
7376
21df384d6150 Added some inspirations received from Tobias.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
96 self.isException = False
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.cFrame = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 # current frame we are at
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.currentFrame = None
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
101 self.frameList = []
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
102 self.getStack()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
103
5206
997064ba25d6 Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5205
diff changeset
104 # frames, where we want to stop or release debugger
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
105 self.stopframe = None
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
106 self.returnframe = None
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
107 self.stop_everywhere = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
108
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__recursionDepth = -1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.setRecursionDepth(inspect.currentframe())
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
111
5044
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
112 # background task to periodicaly check for client interactions
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
113 self.eventPollFlag = False
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
114 self.timer = _thread.start_new_thread(self.__eventPollTimer, ())
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
115
5273
be55746da9d1 Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5263
diff changeset
116 # provide a hook to perform a hard breakpoint
be55746da9d1 Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5263
diff changeset
117 # Use it like this:
be55746da9d1 Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5263
diff changeset
118 # if hasattr(sys, 'breakpoint): sys.breakpoint()
be55746da9d1 Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5263
diff changeset
119 sys.breakpoint = self.set_trace
10119
64147a7e6393 Removed support for Python 3.7 because that is EOL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10065
diff changeset
120 sys.breakpointhook = self.set_trace
5044
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
121
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
122 def __eventPollTimer(self):
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
123 """
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
124 Private method to set a flag every 0.5 s to check for new messages.
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
125 """
5667
86554f131048 Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5659
diff changeset
126 while DebugBase.pollTimerEnabled:
5044
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
127 time.sleep(0.5)
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
128 self.eventPollFlag = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
129
5667
86554f131048 Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5659
diff changeset
130 self.eventPollFlag = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
131
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
132 def getFrame(self, frmnr=0):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
134 Public method to return the frame "frmnr" down the stack.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
136 @param frmnr distance of frames down the stack. 0 is
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
137 the current frame
9559
34fc53e6159d Project Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9542
diff changeset
138 @type int
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 @return the current frame
5222
6548dc1bfd48 Collect all running threads, even if they were not started by the debug client.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5221
diff changeset
140 @rtype frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 """
5222
6548dc1bfd48 Collect all running threads, even if they were not started by the debug client.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5221
diff changeset
142 # Don't show any local frames after the program was stopped
6548dc1bfd48 Collect all running threads, even if they were not started by the debug client.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5221
diff changeset
143 if self.quitting:
6548dc1bfd48 Collect all running threads, even if they were not started by the debug client.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5221
diff changeset
144 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
145
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
146 try:
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
147 return self.frameList[frmnr]
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
148 except IndexError:
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
149 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150
4309
cc9c62f55413 Changed the Python debugger backends to evaluate statements entered into the shell in the frame selected in the local variables viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4293
diff changeset
151 def getFrameLocals(self, frmnr=0):
935
bf9ee1e00bc5 Fixed an issue in the Python debuggers related to the usage of the locals dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 826
diff changeset
152 """
4309
cc9c62f55413 Changed the Python debugger backends to evaluate statements entered into the shell in the frame selected in the local variables viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4293
diff changeset
153 Public method to return the locals dictionary of the current frame
cc9c62f55413 Changed the Python debugger backends to evaluate statements entered into the shell in the frame selected in the local variables viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4293
diff changeset
154 or a frame below.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
156 @param frmnr distance of frame to get locals dictionary of. 0 is
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
157 the current frame
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
158 @type int
4309
cc9c62f55413 Changed the Python debugger backends to evaluate statements entered into the shell in the frame selected in the local variables viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4293
diff changeset
159 @return locals dictionary of the frame
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
160 @rtype dict
935
bf9ee1e00bc5 Fixed an issue in the Python debuggers related to the usage of the locals dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 826
diff changeset
161 """
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
162 try:
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
163 f = self.frameList[frmnr]
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
164 return f.f_locals
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
165 except IndexError:
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
166 return {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167
4642
f18d5fb9a53b Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4631
diff changeset
168 def storeFrameLocals(self, frmnr=0):
f18d5fb9a53b Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4631
diff changeset
169 """
f18d5fb9a53b Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4631
diff changeset
170 Public method to store the locals into the frame, so an access to
f18d5fb9a53b Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4631
diff changeset
171 frame.f_locals returns the last data.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
172
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
173 @param frmnr distance of frame to store locals dictionary to. 0 is
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
174 the current frame
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
175 @type int
4642
f18d5fb9a53b Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4631
diff changeset
176 """
10275
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
177 with contextlib.suppress(IndexError):
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
178 cf = self.frameList[frmnr]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
179
10275
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
180 with contextlib.suppress(ImportError, AttributeError):
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
181 if "__pypy__" in sys.builtin_module_names:
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
182 import __pypy__ # __IGNORE_WARNING_I10__
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
183
10275
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
184 __pypy__.locals_to_fast(cf)
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
185 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
186
10275
76a32e9f16b4 Little fix to 'DebugBase.py'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10167
diff changeset
187 ctypes.pythonapi.PyFrame_LocalsToFast(ctypes.py_object(cf), ctypes.c_int(0))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
188
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 def step(self, traceMode):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 Public method to perform a step operation in this thread.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @param traceMode If it is True, then the step is a step into,
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 otherwise it is a step over.
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
195 @type bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 if traceMode:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.set_step()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 else:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 self.set_next(self.currentFrame)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
201
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 def stepOut(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 Public method to perform a step out of the current call.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 self.set_return(self.currentFrame)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
207
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 def go(self, special):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 Public method to resume the thread.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 It resumes the thread stopping only at breakpoints or exceptions.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
213
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @param special flag indicating a special continue operation
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
215 @type bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 self.set_continue(special)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
218
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 def setRecursionDepth(self, frame):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 Public method to determine the current recursion depth.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
222
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @param frame The current stack frame.
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
224 @type frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.__recursionDepth = 0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 while frame is not None:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.__recursionDepth += 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 frame = frame.f_back
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
230
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10542
diff changeset
231 def profileWithRecursion(self, frame, event, _arg):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """
2166
15b4e58d61d7 Fixed some typos in source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
233 Public method used to trace some stuff independent of the debugger
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 trace function.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
235
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
236 @param frame current stack frame
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
237 @type frame object
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
238 @param event trace event
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
239 @type str
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10542
diff changeset
240 @param _arg arguments (unused)
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
241 @type depends on the previous event parameter
2953
703452a2876f Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2927
diff changeset
242 @exception RuntimeError raised to indicate too many recursions
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
244 if event == "return":
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 self.cFrame = frame.f_back
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 self.__recursionDepth -= 1
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
247 if self._dbgClient.callTraceEnabled:
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
248 self.__sendCallTrace(event, frame, self.cFrame)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
249 elif event == "call":
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
250 if self._dbgClient.callTraceEnabled:
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
251 self.__sendCallTrace(event, self.cFrame, frame)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 self.cFrame = frame
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 self.__recursionDepth += 1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 if self.__recursionDepth > gRecursionLimit:
3021
801289962f4e Fixed a bunch of visible indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2987
diff changeset
255 raise RuntimeError(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
256 "maximum recursion depth exceeded\n"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
257 "(offending frame is two down the stack)"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
258 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
259
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10542
diff changeset
260 def profile(self, frame, event, _arg):
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
261 """
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
262 Public method used to trace some stuff independent of the debugger
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
263 trace function.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
264
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
265 @param frame current stack frame
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
266 @type frame object
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
267 @param event trace event
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
268 @type str
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10542
diff changeset
269 @param _arg arguments (unused)
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
270 @type depends on the previous event parameter
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
271 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
272 if event == "return":
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
273 self.__sendCallTrace(event, frame, frame.f_back)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
274 elif event == "call":
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
275 self.__sendCallTrace(event, frame.f_back, frame)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
276
2170
f4e0f6133ace Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2166
diff changeset
277 def __sendCallTrace(self, event, fromFrame, toFrame):
f4e0f6133ace Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2166
diff changeset
278 """
f4e0f6133ace Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2166
diff changeset
279 Private method to send a call/return trace.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
280
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
281 @param event trace event
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
282 @type str
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
283 @param fromFrame originating frame
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
284 @type frame object
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
285 @param toFrame destination frame
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
286 @type frame object
2170
f4e0f6133ace Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2166
diff changeset
287 """
5046
d57f18f15f1a Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5045
diff changeset
288 if not self.__skipFrame(fromFrame) and not self.__skipFrame(toFrame):
5174
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
289 fromInfo = {
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
290 "filename": self._dbgClient.absPath(self.fix_frame_filename(fromFrame)),
5174
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
291 "linenumber": fromFrame.f_lineno,
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
292 "codename": fromFrame.f_code.co_name,
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
293 }
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
294 toInfo = {
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
295 "filename": self._dbgClient.absPath(self.fix_frame_filename(toFrame)),
5174
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
296 "linenumber": toFrame.f_lineno,
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
297 "codename": toFrame.f_code.co_name,
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
298 }
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
299 self._dbgClient.sendCallTrace(event, fromInfo, toInfo)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
300
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 def trace_dispatch(self, frame, event, arg):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 """
3591
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
303 Public method reimplemented from bdb.py to do some special things.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
304
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 This specialty is to check the connection to the debug server
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 for new events (i.e. new breakpoints) while we are going through
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 the code.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
308
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
309 @param frame The current stack frame
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
310 @type frame object
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
311 @param event The trace event
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
312 @type str
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 @param arg The arguments
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
314 @type depends on the previous event parameter
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 @return local trace function
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
316 @rtype trace function or None
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
317 @exception SystemExit
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 # give the client a chance to push through new break points.
5044
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
320 if self.eventPollFlag:
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
321 self._dbgClient.eventPoll()
630b9f290a77 No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5041
diff changeset
322 self.eventPollFlag = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
323
5083
4affedf129c5 Don't check the quitting flag after each operation.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5064
diff changeset
324 if self.quitting:
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
325 raise SystemExit
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
326
10542
e46910b0ce73 DebugClient
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
327 # check if we are still managing all exceptions
e46910b0ce73 DebugClient
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
328 self._dbgClient.checkExceptionHook()
e46910b0ce73 DebugClient
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
329
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
330 if event == "line":
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
331 if self.stop_here(frame) or self.break_here(frame):
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
332 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
333 self.stop_everywhere
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
334 and frame.f_back
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
335 and frame.f_back.f_code.co_name == "prepareJsonCommand"
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
336 ):
5573
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
337 # Just stepped into print statement, so skip these frames
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
338 self._set_stopinfo(None, frame.f_back)
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
339 else:
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
340 self.user_line(frame)
5263
50a03ff54b15 Make PyPy stop at breakpoints again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5239
diff changeset
341 return self.trace_dispatch
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
342
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
343 if event == "call":
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
344 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
345 self.stop_here(frame)
10290
a362e5d5bf66 Fixed an issue introduced by the recent debugger change.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10289
diff changeset
346 or not self._dbgClient.callTraceOptimization
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
347 or self.__checkBreakInFrame(frame)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
348 or Watch.watches != []
8228
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
349 ) or (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
350 self.stopframe and frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
351 ):
5543
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
352 return self.trace_dispatch
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
353 else:
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
354 # No need to trace this function
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
355 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
357 if event == "return":
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
358 if self.stop_here(frame) or frame == self.returnframe:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
359 # Ignore return events in generator except when stepping.
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
360 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
361 self.stopframe
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
362 and frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
363 ):
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
364 return self.trace_dispatch
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
365 # Only true if we didn't stop in this frame, because it's
5573
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
366 # belonging to the eric debugger.
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
367 if self.stopframe is frame and self.stoplineno != -1:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
368 self._set_stopinfo(None, frame.f_back)
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
369 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
370
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
371 if event == "exception":
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
372 if not self.__skipFrame(frame):
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
373 # When stepping with next/until/return in a generator frame,
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
374 # skip the internal StopIteration exception (with no traceback)
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
375 # triggered by a subiterator run with the 'yield from'
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
376 # statement.
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
377 if not (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
378 frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
379 and arg[0] is StopIteration
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
380 and arg[2] is None
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
381 ):
5536
d28e800f2810 Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5417
diff changeset
382 self.user_exception(arg)
5048
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
383 # Stop at the StopIteration or GeneratorExit exception when the
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
384 # user has set stopframe in a generator by issuing a return
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
385 # command, or a next/until command at the last statement in the
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
386 # generator before the exception.
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
387 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
388 self.stopframe
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
389 and frame is not self.stopframe
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
390 and (self.stopframe.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
391 and arg[0] in (StopIteration, GeneratorExit)
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
392 ):
5536
d28e800f2810 Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5417
diff changeset
393 self.user_exception(arg)
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
394 return None
5012
be693f11da53 Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5007
diff changeset
395
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
396 if event == "c_call":
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
397 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
398 if event == "c_exception":
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
399 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
400 if event == "c_return":
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6687
diff changeset
401 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
402
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
403 print( # __IGNORE_WARNING_M801__
9576
be9f8e7e42e0 Corrected some 'wrong' string quotes caused by the Black line merging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
404 "DebugBase.trace_dispatch: unknown debugging event: ",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
405 repr(event),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
406 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
407
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 return self.trace_dispatch
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
410 def set_trace(self, frame=None):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 """
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
412 Public method to start debugging from 'frame'.
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
413
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
414 If frame is not specified, debugging starts from caller's frame.
5086
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
415 Because of jump optimizations it's not possible to use sys.breakpoint()
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
416 as last instruction in a function or method.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
417
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
418 @param frame frame to start debugging from
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
419 @type frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 """
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
421 if frame is None:
5086
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
422 frame = sys._getframe().f_back # Skip set_trace method
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
423
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7628
diff changeset
424 stopOnHandleCommand = self._dbgClient.handleJsonCommand.__code__
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
425
5086
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
426 frame.f_trace = self.trace_dispatch
5274
a19743a4a8fa Easier and fail save way to get the correct botframe at sys.breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5273
diff changeset
427 while frame.f_back is not None:
5966
3325ecd87c7c Fixed an issue in the debugger backend related to debugging threads.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5761
diff changeset
428 # stop at eric's debugger frame or a threading bootstrap
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
429 if frame.f_back.f_code == stopOnHandleCommand:
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
430 frame.f_trace = self.trace_dispatch
5086
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
431 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
432
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
433 frame = frame.f_back
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
434
5086
6cb8be573090 New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5085
diff changeset
435 self.stop_everywhere = True
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
436 sys.settrace(self.trace_dispatch)
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
437 sys.setprofile(self._dbgClient.callTraceEnabled)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
438
5209
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
439 def bootstrap(self, target, args, kwargs):
5207
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
440 """
5209
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
441 Public method to bootstrap a thread.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
442
5207
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
443 It wraps the call to the user function to enable tracing
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
444 before hand.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
445
5209
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
446 @param target function which is called in the new created thread
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
447 @type function pointer
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
448 @param args arguments to pass to target
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
449 @type tuple
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
450 @param kwargs keyword arguments to pass to target
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
451 @type dict
5207
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
452 """
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
453 try:
5543
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
454 # Because in the initial run method the "base debug" function is
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
455 # set up, it's also valid for the threads afterwards.
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
456 sys.settrace(self.trace_dispatch)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
457
5209
cd058aa6af37 Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5208
diff changeset
458 target(*args, **kwargs)
5538
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
459 except Exception:
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
460 excinfo = sys.exc_info()
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
461 self.user_exception(excinfo, True)
5207
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
462 finally:
5538
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
463 sys.settrace(None)
5207
7283629b02c0 Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5206
diff changeset
464 sys.setprofile(None)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
465
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
466 def run(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
467 self, cmd, globalsDict=None, localsDict=None, debug=True, closeSession=True
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
468 ):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 """
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
470 Public method to start a given command under debugger control.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
471
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
472 @param cmd command / code to execute under debugger control
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
473 @type str or CodeType
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
474 @param globalsDict dictionary of global variables for cmd
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
475 @type dict
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
476 @param localsDict dictionary of local variables for cmd
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
477 @type dict
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
478 @param debug flag if command should run under debugger control
5550
b36f631e4138 Only code style issues.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5543
diff changeset
479 @type bool
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
480 @return exit code of the program
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
481 @rtype int
7903
827d89937c30 Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7900
diff changeset
482 @param closeSession flag indicating to close the debugger session
827d89937c30 Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7900
diff changeset
483 at exit
827d89937c30 Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7900
diff changeset
484 @type bool
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
485 """
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5582
diff changeset
486 if globalsDict is None:
9482
a2bc06a54d9d Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
487 import __main__ # __IGNORE_WARNING_I10__
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
488
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5582
diff changeset
489 globalsDict = __main__.__dict__
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
490
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5582
diff changeset
491 if localsDict is None:
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5582
diff changeset
492 localsDict = globalsDict
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
493
5179
5f56410e7624 Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5178
diff changeset
494 if not isinstance(cmd, types.CodeType):
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
495 cmd = compile(cmd, "<string>", "exec")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
496
5540
40992b7a60a9 Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5539
diff changeset
497 if debug:
5543
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
498 # First time the trace_dispatch function is called, a "base debug"
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
499 # function has to be returned, which is called at every user code
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
500 # function call. This is ensured by setting stop_everywhere.
4e2ab5215bcf Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5540
diff changeset
501 self.stop_everywhere = True
5540
40992b7a60a9 Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5539
diff changeset
502 sys.settrace(self.trace_dispatch)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
503
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
504 try:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
505 exec(cmd, globalsDict, localsDict) # secok
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
506 atexit._run_exitfuncs()
7903
827d89937c30 Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7900
diff changeset
507 self._dbgClient.progTerminated(0, closeSession=closeSession)
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
508 exitcode = 0
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
509 except SystemExit:
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
510 atexit._run_exitfuncs()
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
511 excinfo = sys.exc_info()
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
512 exitcode, message = self.__extractSystemExitMessage(excinfo)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
513 self._dbgClient.progTerminated(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
514 exitcode, message=message, closeSession=closeSession
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
515 )
5538
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
516 except Exception:
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
517 excinfo = sys.exc_info()
d6de2206af1e Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5537
diff changeset
518 self.user_exception(excinfo, True)
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
519 exitcode = 242
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
520 finally:
5206
997064ba25d6 Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5205
diff changeset
521 self.quitting = True
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
522 sys.settrace(None)
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
523 return exitcode
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
524
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
525 def _set_stopinfo(self, stopframe, returnframe, stoplineno=0):
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
526 """
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
527 Protected method to update the frame pointers.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
528
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
529 @param stopframe the frame object where to stop
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
530 @type frame object
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
531 @param returnframe the frame object where to stop on a function return
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
532 @type frame object
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
533 @param stoplineno line number to stop at. If stoplineno is greater than
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
534 or equal to 0, then stop at line greater than or equal to the
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
535 stopline. If stoplineno is -1, then don't stop at all.
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
536 @type int
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
537 """
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
538 self.stopframe = stopframe
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
539 self.returnframe = returnframe
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
540 # stoplineno >= 0 means: stop at line >= the stoplineno
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
541 # stoplineno -1 means: don't stop at all
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
542 self.stoplineno = stoplineno
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
543
5573
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
544 if returnframe is not None:
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
545 # Ensure to be able to stop on the return frame
4f85c1de060d Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5560
diff changeset
546 returnframe.f_trace = self.trace_dispatch
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
547 self.stop_everywhere = False
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
548
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 def set_continue(self, special):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 """
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
551 Public method to stop only on next breakpoint.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
552
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 @param special flag indicating a special continue operation
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
554 @type bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 # Here we only set a new stop frame if it is a normal continue.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 if not special:
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
558 self._set_stopinfo(None, None, -1)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
559
5064
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
560 # Disable tracing if not started in debug mode
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
561 if not self._dbgClient.debugging:
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
562 sys.settrace(None)
9f4e3914e50c Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5063
diff changeset
563 sys.setprofile(None)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
565 def set_until(self, frame=None, lineno=None):
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
566 """
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
567 Public method to stop when the line with the lineno greater than the
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
568 current one is reached or when returning from current frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
569
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
570 @param frame reference to the frame object
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
571 @type frame object
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
572 @param lineno line number to continue to
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
573 @type int
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
574 """
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
575 # the name "until" is borrowed from gdb
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
576 if frame is None:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
577 frame = self.currentFrame
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
578 if lineno is None:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
579 lineno = frame.f_lineno + 1
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
580 self._set_stopinfo(frame, frame, lineno)
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
581
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
582 def set_step(self):
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
583 """
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
584 Public method to stop after one line of code.
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
585 """
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
586 self._set_stopinfo(None, None)
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
587 self.stop_everywhere = True
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
588
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
589 def set_next(self, frame):
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
590 """
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
591 Public method to stop on the next line in or below the given frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
592
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
593 @param frame the frame object
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
594 @type frame object
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
595 """
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
596 self._set_stopinfo(frame, frame.f_back)
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
597 frame.f_trace = self.trace_dispatch
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
598
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
599 def set_return(self, frame):
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
600 """
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
601 Public method to stop when returning from the given frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
602
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
603 @param frame the frame object
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
604 @type frame object
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
605 """
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
606 self._set_stopinfo(None, frame.f_back)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
607
5658
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
608 def move_instruction_pointer(self, lineno):
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
609 """
8444
88b242eba71b Corrected some typos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
610 Public method to move the instruction pointer to another line.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
611
5658
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
612 @param lineno new line number
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
613 @type int
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
614 """
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
615 try:
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
616 self.currentFrame.f_lineno = lineno
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
617 stack = self.getStack(self.currentFrame)
7986
2971d5d19951 Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
618 self._dbgClient.sendResponseLine(stack, self.name)
5658
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
619 except Exception as e:
e5f6fe5855fd move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5644
diff changeset
620 printerr(e)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
621
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
622 def set_quit(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
623 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
624 Public method to quit.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
625
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
626 Disables the trace functions and resets all frame pointer.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
627 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
628 sys.setprofile(None)
5087
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
629 self.stopframe = None
59316f14216b Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5086
diff changeset
630 self.returnframe = None
5287
971f24c89e6b Restore normal stop functionality (F10).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5274
diff changeset
631 for debugThread in self._dbgClient.threads.values():
971f24c89e6b Restore normal stop functionality (F10).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5274
diff changeset
632 debugThread.quitting = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
633
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
634 def fix_frame_filename(self, frame):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
635 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
636 Public method used to fixup the filename for a given frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
637
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
638 The logic employed here is that if a module was loaded
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
639 from a .pyc file, then the correct .py to operate with
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
640 should be in the same path as the .pyc. The reason this
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
641 logic is needed is that when a .pyc file is generated, the
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
642 filename embedded and thus what is readable in the code object
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
643 of the frame object is the fully qualified filepath when the
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644 pyc is generated. If files are moved from machine to machine
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
645 this can break debugging as the .pyc will refer to the .py
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
646 on the original machine. Another case might be sharing
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
647 code over a network... This logic deals with that.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
648
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
649 @param frame the frame object
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
650 @type frame object
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
651 @return fixed up file name
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
652 @rtype str
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
653 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
654 # get module name from __file__
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
655 fn = frame.f_globals.get("__file__")
5700
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
656 try:
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
657 return self._fnCache[fn]
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
658 except KeyError:
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
659 if fn is None:
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
660 return frame.f_code.co_filename
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
661
5700
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
662 absFilename = os.path.abspath(fn)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
663 if absFilename.endswith((".pyc", ".pyo", ".pyd")):
5700
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
664 fixedName = absFilename[:-1]
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
665 if not os.path.exists(fixedName):
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
666 fixedName = absFilename
5700
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
667 else:
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
668 fixedName = absFilename
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
669 # update cache
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
670 self._fnCache[fn] = fixedName
3bcd20e99b52 Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5684
diff changeset
671 return fixedName
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
672
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
673 def __checkBreakInFrame(self, frame):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
674 """
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
675 Private method to check if the function / method has a line number
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
676 which is a breakpoint.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
677
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
678 @param frame the frame object
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
679 @type frame object
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
680 @return Flag indicating a function / method with breakpoint
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
681 @rtype bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
682 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 935
diff changeset
683 try:
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
684 return Breakpoint.breakInFrameCache[
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
685 frame.f_globals.get("__file__"), frame.f_code.co_firstlineno
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
686 ]
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
687 except KeyError:
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
688 filename = self.fix_frame_filename(frame)
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
689 if filename not in Breakpoint.breakInFile:
5048
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
690 Breakpoint.breakInFrameCache[
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
691 frame.f_globals.get("__file__"), frame.f_code.co_firstlineno
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
692 ] = False
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
693 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
694
10287
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
695 try:
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
696 lineNumbers = [
10331
c1a2ff7e3575 Modernized some code and corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10321
diff changeset
697 line for _, _, line in frame.f_code.co_lines() if line is not None
10287
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
698 ]
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
699 except AttributeError:
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
700 # backward compatibility code for Python 3.10 and below
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
701 lineNo = frame.f_code.co_firstlineno
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
702 lineNumbers = [lineNo]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
703
10287
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
704 co_lnotab = frame.f_code.co_lnotab[1::2]
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
705
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
706 # No need to handle special case if a lot of lines between
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
707 # (e.g. closure), because the additional lines won't cause a bp
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
708 for co_lno in co_lnotab:
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
709 if co_lno >= 0x80:
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
710 lineNo -= 0x100
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
711 lineNo += co_lno
0322776373ed Python Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10275
diff changeset
712 lineNumbers.append(lineNo)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
713
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
714 for bp in Breakpoint.breakInFile[filename]:
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
715 if bp in lineNumbers:
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
716 Breakpoint.breakInFrameCache[
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
717 frame.f_globals.get("__file__"), frame.f_code.co_firstlineno
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
718 ] = True
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
719 return True
5048
9899fb545b1f Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5046
diff changeset
720 Breakpoint.breakInFrameCache[
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
721 frame.f_globals.get("__file__"), frame.f_code.co_firstlineno
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
722 ] = False
5045
50862a6a2c63 Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5044
diff changeset
723 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
724
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
725 def break_here(self, frame):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
726 """
3591
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
727 Public method reimplemented from bdb.py to fix the filename from the
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
728 frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
729
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
730 See fix_frame_filename for more info.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
731
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
732 @param frame the frame object
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
733 @type frame object
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
734 @return flag indicating the break status
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
735 @rtype bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
736 """
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
737 filename = self.fix_frame_filename(frame)
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
738 if (filename, frame.f_lineno) in Breakpoint.breaks:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
739 bp, flag = Breakpoint.effectiveBreak(filename, frame.f_lineno, frame)
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
740 if bp:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
741 # flag says ok to delete temp. bp
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
742 if flag and bp.temporary:
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
743 self.__do_clearBreak(filename, frame.f_lineno)
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
744 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
745
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
746 if Watch.watches != []:
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
747 bp, flag = Watch.effectiveWatch(frame)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
748 if bp:
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
749 # flag says ok to delete temp. watch
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
750 if flag and bp.temporary:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
751 self.__do_clearWatch(bp.cond)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
752 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
753
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
754 return False
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
755
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
756 def __do_clearBreak(self, filename, lineno):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
757 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
758 Private method called to clear a temporary breakpoint.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
759
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
760 @param filename name of the file the bp belongs to
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
761 @type str
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
762 @param lineno linenumber of the bp
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
763 @type int
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
764 """
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
765 Breakpoint.clear_break(filename, lineno)
5124
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
766 self._dbgClient.sendClearTemporaryBreakpoint(filename, lineno)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
767
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
768 def __do_clearWatch(self, cond):
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
769 """
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
770 Private method called to clear a temporary watch expression.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
771
5041
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
772 @param cond expression of the watch expression to be cleared
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
773 @type str
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
774 """
f00a4c8bcbbd Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5012
diff changeset
775 Watch.clear_watch(cond)
5174
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
776 self._dbgClient.sendClearTemporaryWatch(cond)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
777
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
778 def getStack(self, frame=None, applyTrace=False):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
779 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
780 Public method to get the stack.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
781
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
782 @param frame frame object to inspect
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
783 @type frame object or list
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
784 @param applyTrace flag to assign trace function to fr.f_trace
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
785 @type bool
10423
299802979277 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
786 @return list of lists with file name, line number, function name
299802979277 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
787 and function arguments
299802979277 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
788 @rtype list of list of [str, int, str, str]
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
789 """
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
790 tb_lineno = None
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
791 if frame is None:
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
792 fr = self.getFrame()
10331
c1a2ff7e3575 Modernized some code and corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10321
diff changeset
793 elif isinstance(frame, list):
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
794 fr, tb_lineno = frame.pop(0)
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
795 else:
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
796 fr = frame
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
797
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
798 self.frameList.clear()
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
799 stack = []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
800 while fr is not None:
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
801 self.frameList.append(fr)
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
802 if applyTrace:
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
803 # Reset the trace function so we can be sure
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
804 # to trace all functions up the stack... This gets around
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
805 # problems where an exception/breakpoint has occurred
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
806 # but we had disabled tracing along the way via a None
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
807 # return from dispatch_call
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
808 fr.f_trace = self.trace_dispatch
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
809
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
810 fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
811 # Always show at least one stack frame, even if it's from eric.
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
812 if stack and os.path.basename(fname).startswith(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
813 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
814 "DebugBase.py",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
815 "DebugClientBase.py",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
816 "ThreadExtension.py",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
817 "threading.py",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
818 )
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
819 ):
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
820 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
821
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
822 fline = tb_lineno or fr.f_lineno
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
823 ffunc = fr.f_code.co_name
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
824
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
825 if ffunc == "?":
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
826 ffunc = ""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
827
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
828 if ffunc and not ffunc.startswith("<"):
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
829 argInfo = getargvalues(fr)
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
830 try:
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
831 fargs = formatargvalues(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
832 argInfo.args, argInfo.varargs, argInfo.keywords, argInfo.locals
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
833 )
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
834 except Exception:
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
835 fargs = ""
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
836 else:
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
837 fargs = ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
838
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
839 stack.append([fname, fline, ffunc, fargs])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
840
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
841 # is it a stack frame or exception list?
10331
c1a2ff7e3575 Modernized some code and corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10321
diff changeset
842 if isinstance(frame, list):
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
843 if frame != []:
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
844 fr, tb_lineno = frame.pop(0)
2620
a3be952f2ae4 Extended the Python debugger backends to report the call arguments and values of the frames.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2486
diff changeset
845 else:
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
846 fr = None
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
847 else:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
848 fr = fr.f_back
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
849
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
850 return stack
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
851
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
852 def user_line(self, frame):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
853 """
3591
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
854 Public method reimplemented to handle the program about to execute a
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
855 particular line.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
856
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
857 @param frame reference to the frame object
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
858 @type frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
859 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
860 # We never stop on line 0.
5063
0b5dccc8aacb Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5062
diff changeset
861 if frame.f_lineno == 0:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
862 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
863
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
864 self.isBroken = True
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
865 self.currentFrame = frame
5204
7376ae3e6668 Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5203
diff changeset
866 stack = self.getStack(frame, applyTrace=True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
867
5221
960afd19c1b6 Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5209
diff changeset
868 self._dbgClient.lockClient()
960afd19c1b6 Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5209
diff changeset
869 self._dbgClient.currentThread = self
960afd19c1b6 Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5209
diff changeset
870 self._dbgClient.currentThreadExec = self
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
871
7986
2971d5d19951 Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
872 self._dbgClient.sendResponseLine(stack, self.name)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
873 self._dbgClient.eventLoop()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
874
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
875 self.frameList.clear()
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
876
5206
997064ba25d6 Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5205
diff changeset
877 self.isBroken = False
5221
960afd19c1b6 Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5209
diff changeset
878 self._dbgClient.unlockClient()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
879
7397
f8d2f6dd6636 Fixed an issue causing multi threaded debugging sessions to hang.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7376
diff changeset
880 self._dbgClient.dumpThreadList()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
881
5536
d28e800f2810 Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5417
diff changeset
882 def user_exception(self, excinfo, unhandled=False):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
883 """
3591
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
884 Public method reimplemented to report an exception to the debug server.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
885
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
886 @param excinfo details about the exception
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
887 @type tuple(Exception, excval object, traceback frame object)
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7897
diff changeset
888 @param unhandled flag indicating an uncaught exception
5084
25115adf9758 Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5083
diff changeset
889 @type bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
890 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
891 exctype, excval, exctb = excinfo
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
892
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
893 if (
10321
4a017fdf316f Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10290
diff changeset
894 not unhandled
4a017fdf316f Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10290
diff changeset
895 and (
4a017fdf316f Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10290
diff changeset
896 exctype in [GeneratorExit, StopIteration]
4a017fdf316f Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10290
diff changeset
897 or not self._dbgClient.reportAllExceptions
4a017fdf316f Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10290
diff changeset
898 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
899 ) or exctype == SystemExit:
4063
b7269498aa95 Fixed a serious issue handling 'non-error' exceptions in the debugger. This bug was about 10 years old.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
900 # ignore these
b7269498aa95 Fixed a serious issue handling 'non-error' exceptions in the debugger. This bug was about 10 years old.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
901 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
902
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
903 if exctype in [SyntaxError, IndentationError]:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
904 try:
10167
0a62a4bf749c Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10119
diff changeset
905 if type(excval) is tuple:
5183
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
906 message, details = excval
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
907 filename, lineno, charno, text = details
5179
5f56410e7624 Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5178
diff changeset
908 else:
5183
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
909 message = excval.msg
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
910 filename = excval.filename
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
911 lineno = excval.lineno
f7037c006edf Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5179
diff changeset
912 charno = excval.offset
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
913
5659
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
914 if filename is None:
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
915 realSyntaxError = False
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
916 else:
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
917 if charno is None:
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
918 charno = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
919
5659
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
920 filename = os.path.abspath(filename)
cf3ecfec6321 report syntax and indentation errors raised by an application or module in the correct manner
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5658
diff changeset
921 realSyntaxError = os.path.exists(filename)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
922
3085
4a0f54a64496 Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3032
diff changeset
923 except (AttributeError, ValueError):
5124
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
924 message = ""
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
925 filename = ""
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
926 lineno = 0
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
927 charno = 0
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
928 realSyntaxError = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
929
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
930 if realSyntaxError:
5124
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
931 self._dbgClient.sendSyntaxError(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
932 message, filename, lineno, charno, self.name
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
933 )
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
934 self._dbgClient.eventLoop()
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
935 self.frameList.clear()
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
936 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
937
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
938 self.skipFrames = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
939 if (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
940 exctype == RuntimeError
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
941 and str(excval).startswith("maximum recursion depth exceeded")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
942 or exctype == RecursionError
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
943 ): # __IGNORE_WARNING__
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
944 excval = "maximum recursion depth exceeded"
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
945 depth = 0
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
946 tb = exctb
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
947 while tb:
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
948 tb = tb.tb_next
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
949
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
950 if (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
951 tb
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
952 and tb.tb_frame.f_code.co_name == "trace_dispatch"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
953 and __file__.startswith(tb.tb_frame.f_code.co_filename)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
954 ):
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
955 depth = 1
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
956 self.skipFrames += depth
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
957
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
958 # always 1 if running without debugger
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
959 self.skipFrames = max(1, self.skipFrames)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
960
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
961 exctype = self.__extractExceptionName(exctype)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
962
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
963 if excval is None:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
964 excval = ""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
965
8257
28146736bbfc Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
966 exctypetxt = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
967 "unhandled {0!s}".format(str(exctype)) if unhandled else str(exctype)
8257
28146736bbfc Applied some more code simplifications suggested by the new Simplify checker (Y108: use ternary operator).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8240
diff changeset
968 )
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7628
diff changeset
969 excvaltxt = str(excval)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
970
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
971 # Don't step into libraries, which are used by our debugger methods
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
972 if exctb is not None:
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
973 self.stop_everywhere = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
974
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
975 self.isBroken = True
7376
21df384d6150 Added some inspirations received from Tobias.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
976 self.isException = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
977
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
978 disassembly = None
5124
1ba8ee313b57 Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4830
diff changeset
979 stack = []
2927
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
980 if exctb:
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
981 frlist = self.__extract_stack(exctb)
f36b757378f1 Fixed an issue in the Python debugger backends when a syntax error was raised for an invalid source file. That will be treated now like any other exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2648
diff changeset
982 frlist.reverse()
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
983 disassembly = self.__disassemble(frlist[0][0])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
984
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
985 self.currentFrame = frlist[0][0]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
986 stack = self.getStack(frlist[self.skipFrames :])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
987
5560
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
988 self._dbgClient.lockClient()
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
989 self._dbgClient.currentThread = self
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
990 self._dbgClient.currentThreadExec = self
7986
2971d5d19951 Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
991 self._dbgClient.sendException(exctypetxt, excvaltxt, stack, self.name)
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
992 self._dbgClient.setDisassembly(disassembly)
5560
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
993 self._dbgClient.dumpThreadList()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
994
5560
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
995 if exctb is not None:
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
996 # When polling kept enabled, it isn't possible to resume after an
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
997 # unhandled exception without further user interaction.
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
998 self._dbgClient.eventLoop(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
999
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1000 self.frameList.clear()
5050
a6335e924d08 Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5048
diff changeset
1001 self.skipFrames = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1002
5560
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
1003 self.isBroken = False
7376
21df384d6150 Added some inspirations received from Tobias.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1004 self.isException = False
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
1005 stop_everywhere = self.stop_everywhere
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
1006 self.stop_everywhere = False
5560
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
1007 self.eventPollFlag = False
597164ed39b7 Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5550
diff changeset
1008 self._dbgClient.unlockClient()
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
1009 self.stop_everywhere = stop_everywhere
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1010
7397
f8d2f6dd6636 Fixed an issue causing multi threaded debugging sessions to hang.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7376
diff changeset
1011 self._dbgClient.dumpThreadList()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1012
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1013 def __extractExceptionName(self, exctype):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1014 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1015 Private method to extract the exception name given the exception
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1016 type object.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1017
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1018 @param exctype type of the exception
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
1019 @type type
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
1020 @return exception name
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
1021 @rtype str
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1022 """
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7628
diff changeset
1023 return str(exctype).replace("<class '", "").replace("'>", "")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1024
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1025 def __extract_stack(self, exctb):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1026 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1027 Private member to return a list of stack frames.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1028
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1029 @param exctb exception traceback
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
1030 @type traceback
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1031 @return list of stack frames
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
1032 @rtype list of frame
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1033 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1034 tb = exctb
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1035 stack = []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1036 while tb is not None:
6687
352a7abb5582 Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1037 stack.append((tb.tb_frame, tb.tb_lineno))
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1038 tb = tb.tb_next
9542
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1039
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1040 # Follow first frame to bottom to catch special case if an exception
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1041 # is thrown in a function with breakpoint in it.
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1042 # eric's frames are filtered out later by self.getStack
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1043 frame = stack[0][0].f_back
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1044 while frame is not None:
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1045 stack.insert(0, (frame, frame.f_lineno))
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1046 frame = frame.f_back
0b04348749ab Improved stack handling in some special cases, e.g. exception in a C-lib or function with breakpoint.
Tobias.Rzepka@gmail.com
parents: 9482
diff changeset
1047
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1048 return stack
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1049
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1050 def __disassemble(self, frame):
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1051 """
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1052 Private method to generate a disassembly of the given code object.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1053
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1054 @param frame frame object to be disassembled
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1055 @type code
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1056 @return dictionary containing the disassembly information
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1057 @rtype dict
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1058 """
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1059 co = frame.f_code
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1060 disDict = {
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1061 "lasti": frame.f_lasti,
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1062 "firstlineno": co.co_firstlineno,
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1063 "instructions": [],
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1064 }
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1065
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1066 # 1. disassembly info
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1067 for instr in dis.get_instructions(co):
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1068 instrDict = {
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1069 "lineno": 0 if instr.starts_line is None else instr.starts_line,
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1070 "isJumpTarget": instr.is_jump_target,
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1071 "offset": instr.offset,
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1072 "opname": instr.opname,
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1073 "arg": instr.arg,
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1074 "argrepr": instr.argrepr,
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1075 }
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1076 disDict["instructions"].append(instrDict)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1077
7711
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1078 # 2. code info
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1079 # Note: keep in sync with PythonDisViewer.__createCodeInfo()
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1080 disDict["codeinfo"] = {
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1081 "name": co.co_name,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1082 "filename": co.co_filename,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1083 "firstlineno": co.co_firstlineno,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1084 "argcount": co.co_argcount,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1085 "kwonlyargcount": co.co_kwonlyargcount,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1086 "nlocals": co.co_nlocals,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1087 "stacksize": co.co_stacksize,
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1088 "flags": dis.pretty_flags(co.co_flags),
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1089 "consts": [str(const) for const in co.co_consts],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1090 "names": [str(name) for name in co.co_names],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1091 "varnames": [str(name) for name in co.co_varnames],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1092 "freevars": [str(var) for var in co.co_freevars],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1093 "cellvars": [str(var) for var in co.co_cellvars],
5e6792b85a8a Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7707
diff changeset
1094 }
7714
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7711
diff changeset
1095 try:
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7711
diff changeset
1096 disDict["codeinfo"]["posonlyargcount"] = co.co_posonlyargcount
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7711
diff changeset
1097 except AttributeError:
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7711
diff changeset
1098 # does not exist prior to 3.8.0
79bde78e3e16 PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7711
diff changeset
1099 disDict["codeinfo"]["posonlyargcount"] = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1100
7707
6abcf4275d0e Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
1101 return disDict
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1102
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1103 def __extractSystemExitMessage(self, excinfo):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1104 """
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1105 Private method to get the SystemExit code and message.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1106
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1107 @param excinfo details about the SystemExit exception
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1108 @type tuple(Exception, excval object, traceback frame object)
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1109 @return SystemExit code and message
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1110 @rtype int, str
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1111 """
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1112 exctype, excval, exctb = excinfo
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1113 if excval is None:
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1114 exitcode = 0
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1115 message = ""
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7628
diff changeset
1116 elif isinstance(excval, str):
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1117 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1118 message = excval
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1119 elif isinstance(excval, bytes):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1120 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1121 message = excval.decode()
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1122 elif isinstance(excval, int):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1123 exitcode = excval
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1124 message = ""
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1125 elif isinstance(excval, SystemExit):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1126 code = excval.code
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7628
diff changeset
1127 if isinstance(code, str):
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1128 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1129 message = code
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1130 elif isinstance(code, bytes):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1131 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1132 message = code.decode()
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1133 elif isinstance(code, int):
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1134 exitcode = code
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1135 message = ""
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
1136 elif code is None:
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
1137 exitcode = 0
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7405
diff changeset
1138 message = ""
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1139 else:
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1140 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1141 message = str(code)
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1142 else:
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1143 exitcode = 1
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1144 message = str(excval)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1145
5537
706ac32a4538 Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5536
diff changeset
1146 return exitcode, message
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1147
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1148 def stop_here(self, frame):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1149 """
3591
2f2a4a76dd22 Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
1150 Public method reimplemented to filter out debugger files.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1151
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1152 Tracing is turned off for files that are part of the
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1153 debugger that are called from the application being debugged.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1154
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1155 @param frame the frame object
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
1156 @type frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1157 @return flag indicating whether the debugger should stop here
5085
85dfb7886fb9 Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5084
diff changeset
1158 @rtype bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1159 """
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1160 if self.__skipFrame(frame):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1161 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1162
7897
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
1163 if frame is self.stopframe:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
1164 if self.stoplineno == -1:
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
1165 return False
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
1166 return frame.f_lineno >= self.stoplineno
9acc015ea443 Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7894
diff changeset
1167 return self.stop_everywhere or frame is self.returnframe
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1168
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1169 def tracePythonLibs(self, enable):
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1170 """
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
1171 Public method to update the settings to trace into Python libraries.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1172
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
1173 @param enable flag to debug into Python libraries
5174
8c48f5e0cd92 Get changes from current branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5088 5169
diff changeset
1174 @type bool
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1175 """
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1176 pathsToSkip = list(self.pathsToSkip)
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1177 # don't trace into Python library?
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1178 if enable:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1179 pathsToSkip = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1180 x
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1181 for x in pathsToSkip
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1182 if not x.endswith(("site-packages", "dist-packages", self.lib))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1183 ]
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1184 else:
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1185 pathsToSkip.append(self.lib)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1186 localLib = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1187 x
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1188 for x in sys.path
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1189 if x.endswith(("site-packages", "dist-packages"))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1190 and not x.startswith(self.lib)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1191 ]
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1192 pathsToSkip.extend(localLib)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1193
5582
d829281d439f Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5573
diff changeset
1194 self.pathsToSkip = tuple(set(pathsToSkip))
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1195
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1196 def __skipFrame(self, frame):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1197 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1198 Private method to filter out debugger files.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1199
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1200 Tracing is turned off for files that are part of the
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1201 debugger that are called from the application being debugged.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1202
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1203 @param frame the frame object
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
1204 @type frame object
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1205 @return flag indicating whether the debugger should skip this frame
5007
e2fa12bb0f53 Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5005
diff changeset
1206 @rtype bool
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1207 """
5005
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1208 try:
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1209 return self.filesToSkip[frame.f_code.co_filename]
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1210 except KeyError:
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1211 ret = frame.f_code.co_filename.startswith(self.pathsToSkip)
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1212 self.filesToSkip[frame.f_code.co_filename] = ret
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1213 return ret
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1214 except AttributeError:
684f5ba04f0b First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4830
diff changeset
1215 # if frame is None
3640
2bf828881e86 Fixed stop at sys.breakpoint() in run mode under Python3 and on first run (Py2 and 3).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3591
diff changeset
1216 return True

eric ide

mercurial