Thu, 24 Sep 2020 19:13:41 +0200
PythonDisViewer: fixed an issue caused by Python < 3.8.0 not knowing about co_posonlyargcount of code objects.
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 | |
7360
9190402e4505
Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
3 | # Copyright (c) 2002 - 2020 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 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import sys |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import os |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
12 | import types |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | import atexit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | import inspect |
4642
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
15 | import ctypes |
5044
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
16 | import time |
4365
d97f2e05ae1b
Enhanced the Python3 debugger a little bit in accordance with bdb.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4309
diff
changeset
|
17 | from inspect import CO_GENERATOR |
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
|
18 | import dis |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
20 | from BreakpointWatch import Breakpoint, Watch |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
22 | import _thread |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
23 | from DebugUtilities import getargvalues, formatargvalues |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
24 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | gRecursionLimit = 64 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
27 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | def printerr(s): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | Module function used for debugging the debug client. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | @param s data to be printed |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | sys.__stderr__.write('{0!s}\n'.format(s)) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | sys.__stderr__.flush() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
37 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | def setRecursionLimit(limit): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | Module function to set the recursion limit. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @param limit recursion limit (integer) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | global gRecursionLimit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | gRecursionLimit = limit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
47 | |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
48 | class DebugBase(object): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | Class implementing base class of the debugger. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
52 | 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
|
53 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
54 | # Don't thrust distutils.sysconfig.get_python_lib: possible case mismatch |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
55 | # on Windows |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
56 | 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
|
57 | # tuple required because it's accessed a lot of times by startswith method |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
58 | 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
|
59 | filesToSkip = {} |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
60 | |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
61 | # 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
|
62 | _fnCache = {} |
5667
86554f131048
Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5659
diff
changeset
|
63 | |
86554f131048
Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5659
diff
changeset
|
64 | # Stop all timers, when greenlets are used |
5674
a0ad2dcb27f9
Corrected some translations related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5667
diff
changeset
|
65 | pollTimerEnabled = True |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
66 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | def __init__(self, dbgClient): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | Constructor |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | @param dbgClient the owning client |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | self._dbgClient = dbgClient |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
74 | |
5209
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
75 | # 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
|
76 | self.isMainThread = False |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
77 | self.quitting = False |
5208
aa8045780ce4
Make attachThread and dumpThreadList runnable again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5207
diff
changeset
|
78 | self.id = -1 |
aa8045780ce4
Make attachThread and dumpThreadList runnable again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5207
diff
changeset
|
79 | self.name = '' |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
81 | self.tracePythonLibs(0) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
83 | # 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
|
84 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
85 | |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
86 | self.isBroken = False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | self.cFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | # current frame we are at |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | self.currentFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
92 | # 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
|
93 | self.stopframe = None |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
94 | self.returnframe = None |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
95 | self.stop_everywhere = False |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
96 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | self.__recursionDepth = -1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | self.setRecursionDepth(inspect.currentframe()) |
5044
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
99 | |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
100 | # 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
|
101 | self.eventPollFlag = False |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
102 | self.timer = _thread.start_new_thread(self.__eventPollTimer, ()) |
5273
be55746da9d1
Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5263
diff
changeset
|
103 | |
be55746da9d1
Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5263
diff
changeset
|
104 | # 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
|
105 | # Use it like this: |
be55746da9d1
Wrong frames when running in sys.breakpoint fixed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5263
diff
changeset
|
106 | # 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
|
107 | sys.breakpoint = self.set_trace |
6404
1a0afc7f2837
Support of breakpoint() builtin of Python 3.7
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
108 | if sys.version_info[:2] >= (3, 7): |
1a0afc7f2837
Support of breakpoint() builtin of Python 3.7
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
109 | 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
|
110 | |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
111 | def __eventPollTimer(self): |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
112 | """ |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
113 | 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
|
114 | """ |
5667
86554f131048
Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5659
diff
changeset
|
115 | 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
|
116 | 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
|
117 | self.eventPollFlag = True |
5667
86554f131048
Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5659
diff
changeset
|
118 | |
86554f131048
Avoid crashes on using greenlets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5659
diff
changeset
|
119 | self.eventPollFlag = False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | def getCurrentFrame(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | Public method to return the current frame. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | @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
|
126 | @rtype frame object |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | """ |
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
|
128 | # 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
|
129 | 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
|
130 | return None |
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
|
131 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
132 | return self.currentFrame |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | |
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
|
134 | 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
|
135 | """ |
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
|
136 | 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
|
137 | or a frame below. |
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
|
138 | |
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
|
139 | @keyparam frmnr distance of frame to get locals dictionary of. 0 is |
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
|
140 | the current frame (int) |
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
|
141 | @return locals dictionary of the frame |
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
|
142 | """ |
4642
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
143 | f = self.currentFrame |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
144 | while f is not None and frmnr > 0: |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
145 | f = f.f_back |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
146 | frmnr -= 1 |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
147 | return f.f_locals |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
148 | |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
149 | 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
|
150 | """ |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
151 | 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
|
152 | frame.f_locals returns the last data. |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
153 | |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
154 | @keyparam frmnr distance of frame to store locals dictionary to. 0 is |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
155 | the current frame (int) |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
156 | """ |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
157 | cf = self.currentFrame |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
158 | while cf is not None and frmnr > 0: |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
159 | cf = cf.f_back |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
160 | frmnr -= 1 |
5156
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
161 | |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
162 | try: |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
163 | if "__pypy__" in sys.builtin_module_names: |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
164 | import __pypy__ |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
165 | __pypy__.locals_to_fast(cf) |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
166 | return |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7442
diff
changeset
|
167 | except Exception: # secok |
5156
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
168 | pass |
5cb4740bd2a9
Little addition to the debuggers to make them more compatible with PyPy.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5140
diff
changeset
|
169 | |
4642
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
170 | ctypes.pythonapi.PyFrame_LocalsToFast( |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
171 | ctypes.py_object(cf), |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
172 | ctypes.c_int(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
|
173 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | def step(self, traceMode): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | Public method to perform a step operation in this thread. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | @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
|
179 | otherwise it is a step over. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | if traceMode: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | self.set_step() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | self.set_next(self.currentFrame) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | def stepOut(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | 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
|
189 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | self.set_return(self.currentFrame) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | def go(self, special): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | Public method to resume the thread. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | It resumes the thread stopping only at breakpoints or exceptions. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | @param special flag indicating a special continue operation |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | self.set_continue(special) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | def setRecursionDepth(self, frame): |
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 determine the current recursion depth. |
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 | @param frame The current stack frame. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | self.__recursionDepth = 0 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | while frame is not None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | self.__recursionDepth += 1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | frame = frame.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
213 | def profileWithRecursion(self, frame, event, arg): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | """ |
2166
15b4e58d61d7
Fixed some typos in source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
215 | 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
|
216 | trace function. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
218 | @param frame current stack frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
219 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
220 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
221 | @type str |
2953
703452a2876f
Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2927
diff
changeset
|
222 | @param arg arguments |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
223 | @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
|
224 | @exception RuntimeError raised to indicate too many recursions |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
226 | if event == 'return': |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | self.cFrame = frame.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | self.__recursionDepth -= 1 |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
229 | if self._dbgClient.callTraceEnabled: |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
230 | self.__sendCallTrace(event, frame, self.cFrame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | elif event == 'call': |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
232 | if self._dbgClient.callTraceEnabled: |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
233 | self.__sendCallTrace(event, self.cFrame, frame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | self.cFrame = frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | self.__recursionDepth += 1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | if self.__recursionDepth > gRecursionLimit: |
3021
801289962f4e
Fixed a bunch of visible indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2987
diff
changeset
|
237 | raise RuntimeError( |
801289962f4e
Fixed a bunch of visible indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2987
diff
changeset
|
238 | 'maximum recursion depth exceeded\n' |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239 | '(offending frame is two down the stack)') |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
241 | def profile(self, frame, event, arg): |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
242 | """ |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
243 | 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
|
244 | trace function. |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
245 | |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
246 | @param frame current stack frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
247 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
248 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
249 | @type str |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
250 | @param arg arguments |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
251 | @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
|
252 | """ |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
253 | if event == 'return': |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
254 | self.__sendCallTrace(event, frame, frame.f_back) |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
255 | elif event == 'call': |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
256 | self.__sendCallTrace(event, frame.f_back, frame) |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
257 | |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
258 | def __sendCallTrace(self, event, fromFrame, toFrame): |
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
259 | """ |
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
260 | Private method to send a call/return trace. |
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
261 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
262 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
263 | @type str |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
264 | @param fromFrame originating frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
265 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
266 | @param toFrame destination frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
267 | @type frame object |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
268 | """ |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
269 | if not self.__skipFrame(fromFrame) and not self.__skipFrame(toFrame): |
5174 | 270 | fromInfo = { |
271 | "filename": self._dbgClient.absPath( | |
272 | self.fix_frame_filename(fromFrame)), | |
273 | "linenumber": fromFrame.f_lineno, | |
274 | "codename": fromFrame.f_code.co_name, | |
275 | } | |
276 | toInfo = { | |
277 | "filename": self._dbgClient.absPath( | |
278 | self.fix_frame_filename(toFrame)), | |
279 | "linenumber": toFrame.f_lineno, | |
280 | "codename": toFrame.f_code.co_name, | |
281 | } | |
282 | self._dbgClient.sendCallTrace(event, fromInfo, toInfo) | |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
283 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284 | def trace_dispatch(self, frame, event, arg): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
286 | Public method reimplemented from bdb.py to do some special things. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288 | 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
|
289 | 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
|
290 | the code. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
292 | @param frame The current stack frame |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
293 | @type frame object |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
294 | @param event The trace event |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
295 | @type str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296 | @param arg The arguments |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
297 | @type depends on the previous event parameter |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298 | @return local trace function |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
299 | @rtype trace function or None |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
300 | @exception SystemExit |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302 | # 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
|
303 | if self.eventPollFlag: |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
304 | self._dbgClient.eventPoll() |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
305 | self.eventPollFlag = False |
5083
4affedf129c5
Don't check the quitting flag after each operation.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5064
diff
changeset
|
306 | |
4affedf129c5
Don't check the quitting flag after each operation.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5064
diff
changeset
|
307 | if self.quitting: |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
308 | raise SystemExit |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310 | if event == 'line': |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
311 | if self.stop_here(frame) or self.break_here(frame): |
5717
b7dd23b4e728
Avoid exception when stepping through greenlet's tasklets.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5700
diff
changeset
|
312 | if (self.stop_everywhere and frame.f_back and |
5573
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
313 | frame.f_back.f_code.co_name == "prepareJsonCommand"): |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
314 | # 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
|
315 | self._set_stopinfo(None, frame.f_back) |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
316 | else: |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
317 | self.user_line(frame) |
5263
50a03ff54b15
Make PyPy stop at breakpoints again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5239
diff
changeset
|
318 | return self.trace_dispatch |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320 | if event == 'call': |
5543
4e2ab5215bcf
Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5540
diff
changeset
|
321 | if (self.stop_here(frame) or |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
322 | self.__checkBreakInFrame(frame) or |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
323 | Watch.watches != []): |
5543
4e2ab5215bcf
Get rid of botframe, because we didn't check against it anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5540
diff
changeset
|
324 | 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
|
325 | else: |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
326 | # 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
|
327 | return None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329 | if event == 'return': |
5573
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
330 | if frame == self.returnframe: |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
331 | # Only true if we didn't stopped in this frame, because it's |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
332 | # belonging to the eric debugger. |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
333 | 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
|
334 | return None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336 | if event == 'exception': |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
337 | if not self.__skipFrame(frame): |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
338 | # 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
|
339 | # skip the internal StopIteration exception (with no traceback) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
340 | # triggered by a subiterator run with the 'yield from' |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
341 | # statement. |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
342 | if not (frame.f_code.co_flags & CO_GENERATOR and |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
343 | arg[0] is StopIteration and arg[2] is None): |
5536
d28e800f2810
Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5417
diff
changeset
|
344 | 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
|
345 | # 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
|
346 | # 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
|
347 | # 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
|
348 | # generator before the exception. |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
349 | elif (self.stopframe and frame is not self.stopframe and |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
350 | self.stopframe.f_code.co_flags & CO_GENERATOR and |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
351 | arg[0] in (StopIteration, GeneratorExit)): |
5536
d28e800f2810
Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5417
diff
changeset
|
352 | 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
|
353 | return None |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
354 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355 | 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
|
356 | return None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357 | 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
|
358 | return None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359 | 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
|
360 | return None |
5174 | 361 | |
5616
adcffadf4962
Reworked some __IGNORE_WARNING__ comments to be more specific.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5587
diff
changeset
|
362 | print('DebugBase.trace_dispatch:' # __IGNORE_WARNING_M801__ |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
363 | ' unknown debugging event: ', |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
364 | repr(event)) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365 | return self.trace_dispatch |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
367 | def set_trace(self, frame=None): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | """ |
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
|
369 | 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
|
370 | |
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
|
371 | 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
|
372 | 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
|
373 | as last instruction in a function or method. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374 | |
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
|
375 | @keyparam 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
|
376 | @type frame object |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377 | """ |
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
|
378 | 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
|
379 | frame = sys._getframe().f_back # Skip set_trace method |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
381 | stopOnHandleCommand = self._dbgClient.handleJsonCommand.__code__ |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
382 | |
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
|
383 | 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
|
384 | 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
|
385 | # stop at eric's debugger frame or a threading bootstrap |
3325ecd87c7c
Fixed an issue in the debugger backend related to debugging threads.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5761
diff
changeset
|
386 | 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
|
387 | 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
|
388 | break |
6cb8be573090
New set_trace for sys.breakpoint to reflect the changes in previous commit.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5085
diff
changeset
|
389 | |
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
|
390 | frame = frame.f_back |
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
|
391 | |
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
|
392 | 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
|
393 | 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
|
394 | sys.setprofile(self._dbgClient.callTraceEnabled) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | |
5209
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
396 | 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
|
397 | """ |
5209
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
398 | Public method to bootstrap a thread. |
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
|
399 | |
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
|
400 | 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
|
401 | before hand. |
5209
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
402 | |
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
403 | @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
|
404 | @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
|
405 | @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
|
406 | @type tuple |
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
407 | @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
|
408 | @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
|
409 | """ |
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
|
410 | 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
|
411 | # 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
|
412 | # 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
|
413 | sys.settrace(self.trace_dispatch) |
5209
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
414 | |
cd058aa6af37
Insert import hook to modify thread module to use our bootstrap.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5208
diff
changeset
|
415 | target(*args, **kwargs) |
5538
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
416 | except Exception: |
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
417 | excinfo = sys.exc_info() |
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
418 | 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
|
419 | finally: |
5538
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
420 | 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
|
421 | sys.setprofile(None) |
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
|
422 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
423 | def run(self, cmd, globalsDict=None, localsDict=None, debug=True): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
424 | """ |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
425 | Public method to start a given command under debugger control. |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
426 | |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
427 | @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
|
428 | @type str or CodeType |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
429 | @keyparam globalsDict dictionary of global variables for cmd |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
430 | @type dict |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
431 | @keyparam 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
|
432 | @type dict |
5550
b36f631e4138
Only code style issues.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5543
diff
changeset
|
433 | @keyparam debug flag if command should run under debugger control |
b36f631e4138
Only code style issues.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5543
diff
changeset
|
434 | @type bool |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
435 | """ |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
436 | if globalsDict is None: |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
437 | import __main__ |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
438 | globalsDict = __main__.__dict__ |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
439 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5582
diff
changeset
|
440 | 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
|
441 | localsDict = globalsDict |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
442 | |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
443 | if not isinstance(cmd, types.CodeType): |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
444 | cmd = compile(cmd, "<string>", "exec") |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
445 | |
5540
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5539
diff
changeset
|
446 | 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
|
447 | # 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
|
448 | # 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
|
449 | # 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
|
450 | self.stop_everywhere = True |
5540
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5539
diff
changeset
|
451 | sys.settrace(self.trace_dispatch) |
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5539
diff
changeset
|
452 | |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
453 | try: |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7442
diff
changeset
|
454 | 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
|
455 | 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
|
456 | self._dbgClient.progTerminated(0) |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
457 | 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
|
458 | 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
|
459 | 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
|
460 | exitcode, message = self.__extractSystemExitMessage(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
|
461 | self._dbgClient.progTerminated(exitcode, message) |
5538
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
462 | except Exception: |
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
463 | excinfo = sys.exc_info() |
d6de2206af1e
Handling of unhandled exceptions restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5537
diff
changeset
|
464 | self.user_exception(excinfo, True) |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
465 | finally: |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
466 | self.quitting = True |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
467 | sys.settrace(None) |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
468 | |
5085
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
469 | def _set_stopinfo(self, stopframe, returnframe): |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
470 | """ |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
471 | Protected method to update the frame pointers. |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
472 | |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
473 | @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
|
474 | @type frame object |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
475 | @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
|
476 | @type frame object |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
477 | """ |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
478 | self.stopframe = stopframe |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
479 | self.returnframe = returnframe |
5573
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
480 | if returnframe is not None: |
4f85c1de060d
Don't step into print statements.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5560
diff
changeset
|
481 | # 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
|
482 | 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
|
483 | self.stop_everywhere = False |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
484 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485 | def set_continue(self, special): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486 | """ |
5085
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
487 | Public method to stop only on next breakpoint. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489 | @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
|
490 | @type bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492 | # 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
|
493 | if not special: |
5205
df1709f0e49f
Change evaluation of last frame to run atexit functions again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5204
diff
changeset
|
494 | self._set_stopinfo(None, None) |
5085
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
495 | |
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
|
496 | # 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
|
497 | 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
|
498 | 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
|
499 | sys.setprofile(None) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500 | |
5085
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
501 | def set_step(self): |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
502 | """ |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
503 | 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
|
504 | """ |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
505 | 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
|
506 | self.stop_everywhere = True |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
507 | |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
508 | 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
|
509 | """ |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
510 | Public method to stop on the next line in or below the given frame. |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
511 | |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
512 | @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
|
513 | @type frame object |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
514 | """ |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
515 | 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
|
516 | 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
|
517 | |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
518 | 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
|
519 | """ |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
520 | Public method to stop when returning from the given frame. |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
521 | |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
522 | @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
|
523 | @type frame object |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
524 | """ |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
525 | self._set_stopinfo(None, frame.f_back) |
5658
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
526 | |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
527 | 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
|
528 | """ |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
529 | Public methode to move the instruction pointer to another line. |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
530 | |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
531 | @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
|
532 | @type int |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
533 | """ |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
534 | try: |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
535 | 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
|
536 | stack = self.getStack(self.currentFrame) |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
537 | self._dbgClient.sendResponseLine(stack) |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5644
diff
changeset
|
538 | 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
|
539 | printerr(e) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541 | def set_quit(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
543 | Public method to quit. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544 | |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
545 | 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
|
546 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547 | sys.setprofile(None) |
5087
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
548 | self.stopframe = None |
59316f14216b
Not much left of bdb, so removed it entirely.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5086
diff
changeset
|
549 | self.returnframe = None |
5287
971f24c89e6b
Restore normal stop functionality (F10).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5274
diff
changeset
|
550 | for debugThread in self._dbgClient.threads.values(): |
971f24c89e6b
Restore normal stop functionality (F10).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5274
diff
changeset
|
551 | debugThread.quitting = True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553 | def fix_frame_filename(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555 | Public method used to fixup the filename for a given frame. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557 | 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
|
558 | 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
|
559 | 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
|
560 | 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
|
561 | 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
|
562 | 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
|
563 | 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
|
564 | 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
|
565 | on the original machine. Another case might be sharing |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
566 | code over a network... This logic deals with that. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
567 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568 | @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
|
569 | @type frame object |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
570 | @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
|
571 | @rtype str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573 | # get module name from __file__ |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
574 | 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
|
575 | try: |
3bcd20e99b52
Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5684
diff
changeset
|
576 | 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
|
577 | 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
|
578 | 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
|
579 | return frame.f_code.co_filename |
3bcd20e99b52
Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5684
diff
changeset
|
580 | |
3bcd20e99b52
Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5684
diff
changeset
|
581 | absFilename = os.path.abspath(fn) |
6405
2763348bf9a6
Try to open the source file if an exceptions in a cython pyd occurred
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6404
diff
changeset
|
582 | 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
|
583 | 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
|
584 | 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
|
585 | 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
|
586 | else: |
3bcd20e99b52
Patch from Detlev revised to avoid an additional check on every call.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5684
diff
changeset
|
587 | 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
|
588 | # 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
|
589 | 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
|
590 | return fixedName |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591 | |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
592 | def __checkBreakInFrame(self, frame): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593 | """ |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
594 | 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
|
595 | which is a breakpoint. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596 | |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
597 | @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
|
598 | @type frame object |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
599 | @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
|
600 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
602 | try: |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
603 | return Breakpoint.breakInFrameCache[ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
604 | frame.f_globals.get('__file__'), |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
605 | frame.f_code.co_firstlineno] |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606 | except KeyError: |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
607 | 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
|
608 | 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
|
609 | Breakpoint.breakInFrameCache[ |
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
610 | frame.f_globals.get('__file__'), |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
611 | frame.f_code.co_firstlineno] = False |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
612 | return False |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
613 | lineNo = frame.f_code.co_firstlineno |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
614 | lineNumbers = [lineNo] |
5203
6f876aca1c34
Changed calculation of line numbers in a function to work properly on Python 3.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5183
diff
changeset
|
615 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
616 | co_lnotab = frame.f_code.co_lnotab[1::2] |
5203
6f876aca1c34
Changed calculation of line numbers in a function to work properly on Python 3.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5183
diff
changeset
|
617 | |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
618 | # No need to handle special case if a lot of lines between |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
619 | # (e.g. closure), because the additional lines won't cause a bp |
5203
6f876aca1c34
Changed calculation of line numbers in a function to work properly on Python 3.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5183
diff
changeset
|
620 | for co_lno in co_lnotab: |
7442
ebcb3a228c3d
DebugBase: fixed an issue causing some breakpoints not being recognized, which was caused by incorrectly determining the line numbers of a frame.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
621 | if co_lno >= 0x80: |
ebcb3a228c3d
DebugBase: fixed an issue causing some breakpoints not being recognized, which was caused by incorrectly determining the line numbers of a frame.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
622 | lineNo -= 0x100 |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
623 | lineNo += co_lno |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
624 | lineNumbers.append(lineNo) |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
625 | |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
626 | 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
|
627 | 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
|
628 | Breakpoint.breakInFrameCache[ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
629 | frame.f_globals.get('__file__'), |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
630 | frame.f_code.co_firstlineno] = True |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
631 | 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
|
632 | Breakpoint.breakInFrameCache[ |
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
633 | frame.f_globals.get('__file__'), |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
634 | frame.f_code.co_firstlineno] = False |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
635 | return False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637 | def break_here(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
639 | 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
|
640 | frame. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642 | See fix_frame_filename for more info. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644 | @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
|
645 | @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
|
646 | @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
|
647 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648 | """ |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
649 | 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
|
650 | if (filename, frame.f_lineno) in Breakpoint.breaks: |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
651 | bp, flag = Breakpoint.effectiveBreak( |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
652 | filename, frame.f_lineno, frame) |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
653 | if bp: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654 | # 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
|
655 | 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
|
656 | 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
|
657 | return True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
659 | 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
|
660 | bp, flag = Watch.effectiveWatch(frame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661 | 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
|
662 | # 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
|
663 | if flag and bp.temporary: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664 | self.__do_clearWatch(bp.cond) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665 | return True |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667 | return False |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
669 | def __do_clearBreak(self, filename, lineno): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671 | Private method called to clear a temporary breakpoint. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
673 | @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
|
674 | @type str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
675 | @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
|
676 | @type int |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677 | """ |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
678 | Breakpoint.clear_break(filename, lineno) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
679 | self._dbgClient.sendClearTemporaryBreakpoint(filename, lineno) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
680 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
681 | 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
|
682 | """ |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
683 | Private method called to clear a temporary watch expression. |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
684 | |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
685 | @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
|
686 | @type str |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
687 | """ |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
688 | Watch.clear_watch(cond) |
5174 | 689 | self._dbgClient.sendClearTemporaryWatch(cond) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690 | |
5204
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
691 | def getStack(self, frame=None, applyTrace=False): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693 | Public method to get the stack. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694 | |
5204
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
695 | @keyparam frame frame object to inspect |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
696 | @type frame object or list |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
697 | @keyparam applyTrace flag to assign trace function to fr.f_trace |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
698 | @type bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699 | @return list of lists with file name (string), line number (integer) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700 | and function name (string) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701 | """ |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
702 | 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
|
703 | if frame is None: |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
704 | fr = self.getCurrentFrame() |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
705 | elif type(frame) == list: |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
706 | 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
|
707 | else: |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
708 | fr = frame |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
709 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
710 | stack = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
711 | while fr is not 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
|
712 | 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
|
713 | # 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
|
714 | # 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
|
715 | # 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
|
716 | # 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
|
717 | # 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
|
718 | fr.f_trace = self.trace_dispatch |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
719 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
720 | 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
|
721 | # 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
|
722 | if stack and os.path.basename(fname).startswith( |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
723 | ("DebugBase.py", "DebugClientBase.py", |
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
|
724 | "ThreadExtension.py", "threading.py")): |
5204
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
725 | break |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
726 | |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
727 | 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
|
728 | ffunc = fr.f_code.co_name |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
729 | |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
730 | if ffunc == '?': |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
731 | ffunc = '' |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
732 | |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
733 | 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
|
734 | 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
|
735 | try: |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
736 | fargs = formatargvalues( |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
737 | argInfo.args, argInfo.varargs, |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
738 | argInfo.keywords, argInfo.locals) |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
739 | 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
|
740 | fargs = "" |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
741 | else: |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
742 | fargs = "" |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
743 | |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
744 | stack.append([fname, fline, ffunc, fargs]) |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
745 | |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
746 | # is it a stack frame or exception list? |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
747 | if type(frame) == list: |
7376ae3e6668
Unify the three different variants of getStack (user_line and user_exception).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5203
diff
changeset
|
748 | if frame != []: |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
749 | 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
|
750 | 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
|
751 | fr = None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
752 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
753 | fr = fr.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
754 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
755 | return stack |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
756 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
757 | def user_line(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
758 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
759 | 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
|
760 | particular line. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
761 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
762 | @param frame the frame object |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
763 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
764 | # 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
|
765 | if frame.f_lineno == 0: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
766 | return |
5088
5b992bcb3c86
Remove some obsolet code, which can't be executed anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5087
diff
changeset
|
767 | |
5582
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
768 | self.isBroken = True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
769 | 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
|
770 | stack = self.getStack(frame, applyTrace=True) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
771 | |
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
|
772 | 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
|
773 | 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
|
774 | self._dbgClient.currentThreadExec = self |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
775 | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
776 | self._dbgClient.sendResponseLine(stack) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
777 | self._dbgClient.eventLoop() |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
778 | |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
779 | 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
|
780 | self._dbgClient.unlockClient() |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
781 | |
5536
d28e800f2810
Remove obsolete parameter 'frame' at user_exception function.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5417
diff
changeset
|
782 | def user_exception(self, excinfo, unhandled=False): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
783 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
784 | Public method reimplemented to report an exception to the debug server. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
785 | |
5084
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
786 | @param excinfo details about the exception |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
787 | @type tuple(Exception, excval object, traceback frame object) |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
788 | @keyparam unhandled flag indicating an uncaught exception |
25115adf9758
Don't use bdb.BdbQuit anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5083
diff
changeset
|
789 | @type bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
790 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
791 | exctype, excval, exctb = excinfo |
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
|
792 | |
5757
9a4e28d0b3c4
Display uncaught GeneratorExit and StopIteration exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5717
diff
changeset
|
793 | if ((exctype in [GeneratorExit, StopIteration] and |
5761
f9e1e4e50b33
Fixed a code style issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5757
diff
changeset
|
794 | unhandled is False) or |
5757
9a4e28d0b3c4
Display uncaught GeneratorExit and StopIteration exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5717
diff
changeset
|
795 | 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
|
796 | # 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
|
797 | return |
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
|
798 | |
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
|
799 | if exctype in [SyntaxError, IndentationError]: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
800 | try: |
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
|
801 | if type(excval) == tuple: |
f7037c006edf
Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5179
diff
changeset
|
802 | 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
|
803 | filename, lineno, charno, text = details |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
804 | 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
|
805 | 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
|
806 | 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
|
807 | 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
|
808 | charno = excval.offset |
f7037c006edf
Invalid __future__ import didn't show a valid error message on Python 2.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5179
diff
changeset
|
809 | |
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
|
810 | 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
|
811 | 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
|
812 | 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
|
813 | 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
|
814 | charno = 0 |
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
|
815 | |
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
|
816 | 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
|
817 | realSyntaxError = os.path.exists(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
|
818 | |
3085
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
819 | except (AttributeError, ValueError): |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
820 | message = "" |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
821 | filename = "" |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
822 | lineno = 0 |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
823 | 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
|
824 | realSyntaxError = True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
825 | |
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
|
826 | if realSyntaxError: |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
827 | self._dbgClient.sendSyntaxError( |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
828 | message, filename, lineno, charno) |
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
|
829 | self._dbgClient.eventLoop() |
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
|
830 | return |
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
|
831 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
832 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
833 | if (exctype == RuntimeError and |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
834 | str(excval).startswith('maximum recursion depth exceeded') or |
5206
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
835 | sys.version_info >= (3, 5) and |
997064ba25d6
Some clean up and restructuring.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5205
diff
changeset
|
836 | exctype == RecursionError): # __IGNORE_WARNING__ |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
837 | excval = 'maximum recursion depth exceeded' |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
838 | depth = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
839 | tb = exctb |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
840 | while tb: |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
841 | tb = tb.tb_next |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
842 | |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
843 | if (tb and tb.tb_frame.f_code.co_name == 'trace_dispatch' and |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
844 | __file__.startswith(tb.tb_frame.f_code.co_filename)): |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
845 | depth = 1 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
846 | self.skipFrames += depth |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
847 | |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
848 | # 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
|
849 | self.skipFrames = max(1, self.skipFrames) |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
850 | |
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
|
851 | exctype = self.__extractExceptionName(exctype) |
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
|
852 | |
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
|
853 | if excval is None: |
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
|
854 | excval = '' |
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
|
855 | |
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
|
856 | if unhandled: |
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
|
857 | exctypetxt = "unhandled {0!s}".format(str(exctype)) |
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
|
858 | else: |
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
|
859 | exctypetxt = str(exctype) |
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
|
860 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
861 | excvaltxt = str(excval) |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
862 | |
5582
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
863 | # 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
|
864 | 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
|
865 | self.stop_everywhere = False |
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
866 | |
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
867 | self.isBroken = True |
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
868 | |
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
|
869 | disassembly = None |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4830
diff
changeset
|
870 | 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
|
871 | 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
|
872 | 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
|
873 | 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
|
874 | disassembly = self.__disassemble(frlist[0][0]) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
875 | |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
876 | self.currentFrame = frlist[0][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
|
877 | stack = self.getStack(frlist[self.skipFrames:]) |
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
|
878 | |
5560
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
879 | self._dbgClient.lockClient() |
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
880 | 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
|
881 | self._dbgClient.currentThreadExec = self |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
882 | self._dbgClient.sendException(exctypetxt, excvaltxt, stack) |
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
|
883 | 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
|
884 | self._dbgClient.dumpThreadList() |
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
|
885 | |
5560
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
886 | 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
|
887 | # 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
|
888 | # 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
|
889 | self._dbgClient.eventLoop(True) |
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
|
890 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
891 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
892 | |
5560
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
893 | self.isBroken = False |
5582
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
894 | 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
|
895 | 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
|
896 | self.eventPollFlag = False |
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
897 | 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
|
898 | self.stop_everywhere = stop_everywhere |
5560
597164ed39b7
Prevent ordinary breakpoints to steal the focus from an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5550
diff
changeset
|
899 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
900 | def __extractExceptionName(self, exctype): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
901 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
902 | 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
|
903 | type object. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
904 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
905 | @param exctype type of the exception |
2953
703452a2876f
Started correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2927
diff
changeset
|
906 | @return exception name (string) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
907 | """ |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
908 | return str(exctype).replace("<class '", "").replace("'>", "") |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
909 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
910 | def __extract_stack(self, exctb): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
911 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
912 | Private member to return a list of stack frames. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
913 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
914 | @param exctb exception traceback |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
915 | @return list of stack frames |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
916 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
917 | tb = exctb |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
918 | stack = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
919 | while tb is not None: |
6687
352a7abb5582
Show correct line number on specific exceptions.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
920 | stack.append((tb.tb_frame, tb.tb_lineno)) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
921 | tb = tb.tb_next |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
922 | tb = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
923 | return stack |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
924 | |
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
|
925 | 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
|
926 | """ |
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
|
927 | Private method to generate a disassembly of the given code object. |
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
|
928 | |
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
|
929 | @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
|
930 | @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
|
931 | @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
|
932 | @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
|
933 | """ |
7711
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
934 | 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
|
935 | 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
|
936 | "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
|
937 | "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
|
938 | "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
|
939 | } |
7711
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
940 | |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
941 | # 1. disassembly info |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
942 | 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
|
943 | instrDict = { |
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
|
944 | "lineno": |
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
|
945 | 0 if instr.starts_line is None else instr.starts_line, |
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
|
946 | "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
|
947 | "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
|
948 | "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
|
949 | "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
|
950 | "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
|
951 | } |
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
|
952 | disDict["instructions"].append(instrDict) |
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
|
953 | |
7711
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
954 | # 2. code info |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
955 | # 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
|
956 | disDict["codeinfo"] = { |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
957 | "name": co.co_name, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
958 | "filename": co.co_filename, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
959 | "firstlineno": co.co_firstlineno, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
960 | "argcount": co.co_argcount, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
961 | "posonlyargcount": co.co_posonlyargcount, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
962 | "kwonlyargcount": co.co_kwonlyargcount, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
963 | "nlocals": co.co_nlocals, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
964 | "stacksize": co.co_stacksize, |
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
965 | "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
|
966 | "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
|
967 | "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
|
968 | "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
|
969 | "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
|
970 | "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
|
971 | } |
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
|
972 | 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
|
973 | 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
|
974 | 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
|
975 | # 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
|
976 | disDict["codeinfo"]["posonlyargcount"] = 0 |
7711
5e6792b85a8a
Added capability to show information about a code object.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
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 | return 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
|
979 | |
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
|
980 | 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
|
981 | """ |
706ac32a4538
Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
982 | Private method to get the 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
|
983 | |
706ac32a4538
Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
984 | @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
|
985 | @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
|
986 | @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
|
987 | @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
|
988 | """ |
706ac32a4538
Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
989 | 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
|
990 | 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
|
991 | 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
|
992 | message = "" |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
993 | 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
|
994 | 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
|
995 | 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
|
996 | 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
|
997 | 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
|
998 | 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
|
999 | 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
|
1000 | 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
|
1001 | 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
|
1002 | 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
|
1003 | code = excval.code |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7628
diff
changeset
|
1004 | 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
|
1005 | 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
|
1006 | 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
|
1007 | 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
|
1008 | 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
|
1009 | 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
|
1010 | 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
|
1011 | 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
|
1012 | 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
|
1013 | 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
|
1014 | 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
|
1015 | 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
|
1016 | 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
|
1017 | 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
|
1018 | message = str(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
|
1019 | |
706ac32a4538
Improved handling of program termination. atexit is only run once as specified anymore.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
1020 | return exitcode, 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
|
1021 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1022 | def stop_here(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1023 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
1024 | Public method reimplemented to filter out debugger files. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1025 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1026 | 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
|
1027 | debugger that are called from the application being debugged. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1028 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1029 | @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
|
1030 | @type frame object |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1031 | @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
|
1032 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1033 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1034 | if self.__skipFrame(frame): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1035 | return False |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1036 | |
5085
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
1037 | return (self.stop_everywhere or |
85dfb7886fb9
Determination where to stop in stop_here heavily reworked.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5084
diff
changeset
|
1038 | frame is self.stopframe or |
5205
df1709f0e49f
Change evaluation of last frame to run atexit functions again.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5204
diff
changeset
|
1039 | frame is self.returnframe) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1040 | |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1041 | 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
|
1042 | """ |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
1043 | Public method to update the settings to trace into Python libraries. |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1044 | |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
1045 | @param enable flag to debug into Python libraries |
5174 | 1046 | @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
|
1047 | """ |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1048 | 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
|
1049 | # 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
|
1050 | if enable: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1051 | pathsToSkip = [x for x in pathsToSkip if not x.endswith( |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1052 | ("site-packages", "dist-packages", self.lib))] |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1053 | else: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1054 | pathsToSkip.append(self.lib) |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1055 | localLib = [x for x in sys.path if x.endswith(("site-packages", |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1056 | "dist-packages")) and not x.startswith(self.lib)] |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1057 | pathsToSkip.extend(localLib) |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1058 | |
5582
d829281d439f
Little improvements and avoid stepping into libs after an exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5573
diff
changeset
|
1059 | 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
|
1060 | |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1061 | def __skipFrame(self, frame): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1062 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1063 | Private method to filter out debugger files. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1064 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1065 | 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
|
1066 | debugger that are called from the application being debugged. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1067 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1068 | @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
|
1069 | @type frame object |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1070 | @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
|
1071 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1072 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1073 | try: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1074 | 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
|
1075 | except KeyError: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1076 | 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
|
1077 | 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
|
1078 | return ret |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1079 | except AttributeError: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
1080 | # 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
|
1081 | return True |