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