Sun, 24 Jul 2016 21:34:54 +0200
Improvements on eric's set_trace and set_continue if not in debugging mode.
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 | |
4631
5c1a96925da4
Updated copyright for 2016.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4566
diff
changeset
|
3 | # Copyright (c) 2009 - 2016 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 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing the debug base class. |
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 bdb |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import os |
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 _thread |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
17 | 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
|
18 | from inspect import CO_GENERATOR |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
20 | from DebugProtocol import ResponseClearWatch, ResponseClearBreak, \ |
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
21 | ResponseLine, ResponseSyntax, ResponseException, CallTrace |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
22 | from DebugUtilities import getargvalues, formatargvalues |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
23 | from BreakpointWatch import Breakpoint, Watch |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | gRecursionLimit = 64 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
27 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | def printerr(s): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | Module function used for debugging the debug client. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | @param s data to be printed |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | sys.__stderr__.write('{0!s}\n'.format(s)) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | sys.__stderr__.flush() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
37 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | def setRecursionLimit(limit): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | Module function to set the recursion limit. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @param limit recursion limit (integer) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | global gRecursionLimit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | gRecursionLimit = limit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
47 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | class DebugBase(bdb.Bdb): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | Class implementing base class of the debugger. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | Provides simple wrapper methods around bdb for the 'owning' client to |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | call to step etc. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
55 | # 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
|
56 | # on Windows |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
57 | lib = os.path.dirname(bdb.__file__) |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
58 | # tuple required because it's accessed a lot of times by startswith method |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
59 | pathsToSkip = ('<', os.path.dirname(__file__), bdb.__file__[:-1]) |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
60 | filesToSkip = {} |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
61 | |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
62 | # 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
|
63 | _fnCache = {} |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
64 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | def __init__(self, dbgClient): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | Constructor |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @param dbgClient the owning client |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | bdb.Bdb.__init__(self) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | self._dbgClient = dbgClient |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | self._mainThread = True |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
76 | self.tracePythonLibs(0) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
78 | # 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
|
79 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
80 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
81 | self.__isBroken = False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | self.cFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | # current frame we are at |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | self.currentFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | # frame that we are stepping in, can be different than currentFrame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | self.stepFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | # provide a hook to perform a hard breakpoint |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | # Use it like this: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | # if hasattr(sys, 'breakpoint): sys.breakpoint() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | sys.breakpoint = self.set_trace |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | # initialize parent |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | bdb.Bdb.reset(self) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | self.__recursionDepth = -1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | 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
|
100 | |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
101 | # 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
|
102 | self.eventPollFlag = False |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
103 | self.timer = _thread.start_new_thread(self.__eventPollTimer, ()) |
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 | def __eventPollTimer(self): |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
106 | """ |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
107 | 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
|
108 | """ |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
109 | while True: |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
110 | 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
|
111 | self.eventPollFlag = True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | def getCurrentFrame(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | Public method to return the current frame. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | @return the current frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
119 | return self.currentFrame |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | |
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
|
121 | 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
|
122 | """ |
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
|
123 | 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
|
124 | 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
|
125 | |
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
|
126 | @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
|
127 | 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
|
128 | @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
|
129 | """ |
4642
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
130 | f = self.currentFrame |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
131 | 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
|
132 | f = f.f_back |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
133 | frmnr -= 1 |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
134 | return f.f_locals |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
135 | |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
136 | 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
|
137 | """ |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
138 | 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
|
139 | 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
|
140 | |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
141 | @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
|
142 | the current frame (int) |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
143 | """ |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
144 | cf = self.currentFrame |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
145 | 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
|
146 | cf = cf.f_back |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
147 | frmnr -= 1 |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
148 | ctypes.pythonapi.PyFrame_LocalsToFast( |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
149 | ctypes.py_object(cf), |
f18d5fb9a53b
Store values entered into the shell in selected frame.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4631
diff
changeset
|
150 | 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
|
151 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | def step(self, traceMode): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | 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
|
155 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | @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
|
157 | otherwise it is a step over. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | self.stepFrame = self.currentFrame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | if traceMode: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | self.currentFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | self.set_step() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | self.set_next(self.currentFrame) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | def stepOut(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | 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
|
170 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | self.stepFrame = self.currentFrame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | self.set_return(self.currentFrame) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | def go(self, special): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | Public method to resume the thread. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | 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
|
179 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | @param special flag indicating a special continue operation |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | self.currentFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | self.set_continue(special) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | def setRecursionDepth(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | Public method to determine the current recursion depth. |
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 | @param frame The current stack frame. |
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 | self.__recursionDepth = 0 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | while frame is not None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | self.__recursionDepth += 1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | frame = frame.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
196 | def profileWithRecursion(self, frame, event, arg): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | """ |
2166
15b4e58d61d7
Fixed some typos in source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
198 | 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
|
199 | trace function. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
201 | @param frame current stack frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
202 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
203 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
204 | @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
|
205 | @param arg arguments |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
206 | @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
|
207 | @exception RuntimeError raised to indicate too many recursions |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
209 | if event == 'return': |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | self.cFrame = frame.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | self.__recursionDepth -= 1 |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
212 | if self._dbgClient.callTraceEnabled: |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
213 | self.__sendCallTrace(event, frame, self.cFrame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | elif event == 'call': |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
215 | if self._dbgClient.callTraceEnabled: |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
216 | self.__sendCallTrace(event, self.cFrame, frame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | self.cFrame = frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | self.__recursionDepth += 1 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | if self.__recursionDepth > gRecursionLimit: |
3021
801289962f4e
Fixed a bunch of visible indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2987
diff
changeset
|
220 | raise RuntimeError( |
801289962f4e
Fixed a bunch of visible indentation issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2987
diff
changeset
|
221 | 'maximum recursion depth exceeded\n' |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222 | '(offending frame is two down the stack)') |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
224 | 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
|
225 | """ |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
226 | 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
|
227 | trace function. |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
228 | |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
229 | @param frame current stack frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
230 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
231 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
232 | @type str |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
233 | @param arg arguments |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
234 | @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
|
235 | """ |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
236 | if event == 'return': |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
237 | 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
|
238 | elif event == 'call': |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
239 | 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
|
240 | |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
241 | def __sendCallTrace(self, event, fromFrame, toFrame): |
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
242 | """ |
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
243 | 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
|
244 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
245 | @param event trace event |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
246 | @type str |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
247 | @param fromFrame originating frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
248 | @type frame object |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
249 | @param toFrame destination frame |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
250 | @type frame object |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
251 | """ |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
252 | if not self.__skipFrame(fromFrame) and not self.__skipFrame(toFrame): |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
253 | fromStr = "{0}:{1}:{2}".format( |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
254 | self._dbgClient.absPath(self.fix_frame_filename(fromFrame)), |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
255 | fromFrame.f_lineno, |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
256 | fromFrame.f_code.co_name) |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
257 | toStr = "{0}:{1}:{2}".format( |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
258 | self._dbgClient.absPath(self.fix_frame_filename(toFrame)), |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
259 | toFrame.f_lineno, |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
260 | toFrame.f_code.co_name) |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
261 | self._dbgClient.write("{0}{1}@@{2}@@{3}\n".format( |
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5045
diff
changeset
|
262 | CallTrace, event[0], fromStr, toStr)) |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2166
diff
changeset
|
263 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | def trace_dispatch(self, frame, event, arg): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
266 | 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
|
267 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268 | 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
|
269 | 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
|
270 | the code. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
272 | @param frame The current stack frame |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
273 | @type frame object |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
274 | @param event The trace event |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
275 | @type str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276 | @param arg The arguments |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
277 | @type depends on the previous event parameter |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278 | @return local trace function |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
279 | @rtype trace function or None |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
280 | @exception bdb.BdbQuit |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282 | if self.quitting: |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
283 | return # None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285 | # 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
|
286 | if self.eventPollFlag: |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
287 | self._dbgClient.eventPoll() |
630b9f290a77
No polling of incoming messages. Just wait for a flag.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5041
diff
changeset
|
288 | self.eventPollFlag = False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
290 | if event == 'line': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
291 | if self.stop_here(frame) or self.break_here(frame): |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
292 | self.user_line(frame) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
293 | if self.quitting: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
294 | raise bdb.BdbQuit |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
295 | return |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297 | if event == 'call': |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
298 | if self.botframe is None: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
299 | # First call of dispatch since reset() |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
300 | # (CT) Note that this may also be None! |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
301 | self.botframe = frame.f_back |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
302 | return self.trace_dispatch |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
303 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
304 | if not (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
|
305 | 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
|
306 | Watch.watches != []): |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
307 | # No need to trace this function |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
308 | return |
826
2e3e2055e715
Fixed a few PEP 8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
309 | if self.quitting: |
2e3e2055e715
Fixed a few PEP 8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
310 | raise bdb.BdbQuit |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
311 | return self.trace_dispatch |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
313 | if event == 'return': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
314 | if self.stop_here(frame) or frame == self.returnframe: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
315 | # Ignore return events in generator except when stepping. |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
316 | if self.stopframe and frame.f_code.co_flags & CO_GENERATOR: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
317 | return |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
318 | # The program has finished if we have just left the first frame |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
319 | if frame == self._dbgClient.mainFrame and \ |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
320 | self._mainThread: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
321 | atexit._run_exitfuncs() |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
322 | self._dbgClient.progTerminated(arg) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
323 | elif frame is not self.stepFrame: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
324 | self.stepFrame = None |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
325 | self.user_line(frame) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
326 | |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
327 | if self.quitting and not self._dbgClient.passive: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
328 | raise bdb.BdbQuit |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
329 | return |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
331 | if event == 'exception': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
332 | if not self.__skipFrame(frame): |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
333 | # 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
|
334 | # skip the internal StopIteration exception (with no traceback) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
335 | # triggered by a subiterator run with the 'yield from' |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
336 | # statement. |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
337 | 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
|
338 | arg[0] is StopIteration and arg[2] is None): |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
339 | self.user_exception(frame, arg) |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
340 | if self.quitting: |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
341 | raise bdb.BdbQuit |
5048
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
342 | # 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
|
343 | # 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
|
344 | # 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
|
345 | # generator before the exception. |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
346 | 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
|
347 | self.stopframe.f_code.co_flags & CO_GENERATOR and |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
348 | arg[0] in (StopIteration, GeneratorExit)): |
4365
d97f2e05ae1b
Enhanced the Python3 debugger a little bit in accordance with bdb.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4309
diff
changeset
|
349 | self.user_exception(frame, arg) |
d97f2e05ae1b
Enhanced the Python3 debugger a little bit in accordance with bdb.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4309
diff
changeset
|
350 | if self.quitting: |
d97f2e05ae1b
Enhanced the Python3 debugger a little bit in accordance with bdb.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4309
diff
changeset
|
351 | raise bdb.BdbQuit |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
352 | return |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
353 | |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
354 | if event == 'c_call': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
355 | return |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
356 | if event == 'c_exception': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
357 | return |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
358 | if event == 'c_return': |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
359 | return |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
360 | print('bdb.Bdb.dispatch: unknown debugging event: ', repr(event)) # __IGNORE_WARNING__ |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361 | return self.trace_dispatch |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
363 | def set_trace(self, frame=None): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364 | """ |
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
|
365 | 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
|
366 | |
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
|
367 | If frame is not specified, debugging starts from caller's frame. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369 | @param frame frame to start debugging from |
5064
9f4e3914e50c
Improvements on eric's set_trace and set_continue if not in debugging mode.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5063
diff
changeset
|
370 | @type frame object |
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 | if frame is 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
|
373 | frame = sys._getframe().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
|
374 | |
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
|
375 | # stop at erics debugger 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
|
376 | while 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
|
377 | if not self.__skipFrame(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
|
378 | frame.f_trace = 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
|
379 | 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
|
380 | self.botframe = 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
|
381 | if self.__skipFrame(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
|
382 | break |
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
|
383 | |
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
|
384 | self.set_step() |
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
|
385 | 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
|
386 | sys.setprofile(self._dbgClient.callTraceEnabled) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388 | def set_continue(self, special): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
390 | Public method reimplemented from bdb.py to always get informed of |
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
391 | exceptions. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393 | @param special flag indicating a special continue operation |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | # Modified version of the one found in bdb.py |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396 | # 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
|
397 | if not special: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398 | self._set_stopinfo(self.botframe, None) |
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 | # 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
|
400 | 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
|
401 | 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
|
402 | sys.setprofile(None) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404 | def set_quit(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
406 | Public method to quit. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
408 | It wraps call to bdb to clear the current frame properly. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
410 | self.currentFrame = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411 | sys.setprofile(None) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412 | bdb.Bdb.set_quit(self) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414 | def fix_frame_filename(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416 | 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
|
417 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418 | 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
|
419 | 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
|
420 | 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
|
421 | 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
|
422 | 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
|
423 | 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
|
424 | 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
|
425 | 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
|
426 | on the original machine. Another case might be sharing |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
427 | code over a network... This logic deals with that. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
428 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429 | @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
|
430 | @type frame object |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
431 | @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
|
432 | @rtype str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
433 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434 | # 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
|
435 | fn = frame.f_globals.get('__file__') |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
436 | try: |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
437 | return self._fnCache[fn] |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
438 | except KeyError: |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
439 | if fn and fn != frame.f_code.co_filename: |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
440 | absFilename = os.path.abspath(fn) |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
441 | if absFilename.endswith(('.pyc', '.pyo')): |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
442 | fixedName = absFilename[:-1] |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
443 | if not os.path.exists(fixedName): |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
444 | fixedName = absFilename |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
445 | else: |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
446 | fixedName = absFilename |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
447 | else: |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
448 | fixedName = frame.f_code.co_filename |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
449 | # update cache |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
450 | self._fnCache[fn] = fixedName |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
451 | return fixedName |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452 | |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
453 | def __checkBreakInFrame(self, frame): |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
454 | """ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
455 | 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
|
456 | which is a breakpoint. |
5048
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
457 | |
5045
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
458 | @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
|
459 | @type frame object |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
460 | @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
|
461 | @rtype bool |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
462 | """ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
463 | try: |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
464 | return Breakpoint.breakInFrameCache[ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
465 | 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
|
466 | 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
|
467 | except KeyError: |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
468 | 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
|
469 | 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
|
470 | Breakpoint.breakInFrameCache[ |
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
471 | 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
|
472 | 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
|
473 | return False |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
474 | 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
|
475 | lineNumbers = [lineNo] |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
476 | # 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
|
477 | # (e.g. closure), because the additional lines won't cause a bp |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
478 | for co_lno in frame.f_code.co_lnotab[1::2]: |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
479 | lineNo += co_lno |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
480 | lineNumbers.append(lineNo) |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
481 | |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
482 | 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
|
483 | 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
|
484 | Breakpoint.breakInFrameCache[ |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
485 | 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
|
486 | 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
|
487 | 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
|
488 | Breakpoint.breakInFrameCache[ |
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
489 | 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
|
490 | 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
|
491 | return False |
50862a6a2c63
Check only once if a function / method has a breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
492 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493 | def break_here(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
495 | 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
|
496 | frame. |
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 | See fix_frame_filename for more info. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500 | @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
|
501 | @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
|
502 | @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
|
503 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504 | """ |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
505 | 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
|
506 | 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
|
507 | 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
|
508 | 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
|
509 | if bp: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510 | # 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
|
511 | 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
|
512 | 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
|
513 | return True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
515 | 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
|
516 | bp, flag = Watch.effectiveWatch(frame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517 | 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
|
518 | # 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
|
519 | if flag and bp.temporary: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
520 | self.__do_clearWatch(bp.cond) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521 | return True |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523 | return False |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524 | |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
525 | def __do_clearBreak(self, filename, lineno): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527 | Private method called to clear a temporary breakpoint. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529 | @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
|
530 | @type str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531 | @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
|
532 | @type int |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533 | """ |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
534 | Breakpoint.clear_break(filename, lineno) |
5048
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
535 | self._dbgClient.write('{0}{1},{2:d}\n'.format( |
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
536 | ResponseClearBreak, filename, lineno)) |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
537 | |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
538 | 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
|
539 | """ |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
540 | 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
|
541 | |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
542 | @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
|
543 | @type str |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
544 | """ |
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5012
diff
changeset
|
545 | Watch.clear_watch(cond) |
5048
9899fb545b1f
Fixed some code style issues and removed the obsolete method shouldSkip.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5046
diff
changeset
|
546 | self._dbgClient.write('{0}{1}\n'.format(ResponseClearWatch, cond)) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548 | def getStack(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550 | Public method to get the stack. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552 | @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
|
553 | and function name (string) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555 | fr = self.cFrame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556 | stack = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557 | while fr is not None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
558 | fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) |
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
|
559 | if not fname.startswith("<"): |
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
|
560 | fline = fr.f_lineno |
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
|
561 | ffunc = fr.f_code.co_name |
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
|
562 | |
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
|
563 | if ffunc == '?': |
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
|
564 | ffunc = '' |
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
|
565 | |
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
|
566 | if ffunc and not ffunc.startswith("<"): |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
567 | argInfo = getargvalues(fr) |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
568 | try: |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
569 | fargs = formatargvalues( |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
570 | argInfo.args, argInfo.varargs, |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
571 | argInfo.keywords, argInfo.locals) |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
572 | except Exception: |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
573 | fargs = "" |
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
|
574 | else: |
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
|
575 | fargs = "" |
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
|
576 | |
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
|
577 | stack.append([fname, fline, ffunc, fargs]) |
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 | if fr == self._dbgClient.mainFrame: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
580 | fr = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
581 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582 | fr = fr.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
583 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
584 | return stack |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586 | def user_line(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
588 | 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
|
589 | particular line. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591 | @param frame the frame object |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593 | # 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
|
594 | if frame.f_lineno == 0: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595 | return |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597 | # See if we are skipping at the start of a newly loaded program. |
5063
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
598 | # Then get the complete frame stack without eric or Python supplied |
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
599 | # libraries |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600 | if self._dbgClient.mainFrame is None: |
4683
1ba6ba86b383
Determination of frame boundaries corrected.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4642
diff
changeset
|
601 | fr = frame |
1ba6ba86b383
Determination of frame boundaries corrected.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4642
diff
changeset
|
602 | while (fr is not None and |
1ba6ba86b383
Determination of frame boundaries corrected.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4642
diff
changeset
|
603 | fr.f_code != self._dbgClient.handleLine.__code__): |
5063
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
604 | if (fr.f_code.co_filename == '<string>' or |
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
605 | os.path.dirname(fr.f_code.co_filename) == self.lib): |
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
606 | break |
0b5dccc8aacb
Hide frames belonging to the debugger at a regular breakpoint.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5062
diff
changeset
|
607 | |
4683
1ba6ba86b383
Determination of frame boundaries corrected.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4642
diff
changeset
|
608 | self._dbgClient.mainFrame = fr |
1ba6ba86b383
Determination of frame boundaries corrected.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4642
diff
changeset
|
609 | fr = fr.f_back |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611 | self.currentFrame = frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
612 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
613 | fr = frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
614 | stack = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
615 | while fr is not None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616 | # Reset the trace function so we can be sure |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
617 | # to trace all functions up the stack... This gets around |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618 | # problems where an exception/breakpoint has occurred |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
619 | # but we had disabled tracing along the way via a None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620 | # return from dispatch_call |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
621 | fr.f_trace = self.trace_dispatch |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622 | fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) |
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
|
623 | if not fname.startswith("<"): |
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
|
624 | fline = fr.f_lineno |
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
|
625 | ffunc = fr.f_code.co_name |
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
|
626 | |
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
|
627 | if ffunc == '?': |
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
|
628 | ffunc = '' |
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
|
629 | |
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
|
630 | if ffunc and not ffunc.startswith("<"): |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
631 | argInfo = getargvalues(fr) |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
632 | try: |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
633 | fargs = formatargvalues( |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
634 | argInfo.args, argInfo.varargs, |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
635 | argInfo.keywords, argInfo.locals) |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
636 | except Exception: |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
637 | fargs = "" |
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
|
638 | else: |
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
|
639 | fargs = "" |
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
|
640 | |
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
|
641 | stack.append([fname, fline, ffunc, fargs]) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643 | if fr == self._dbgClient.mainFrame: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644 | fr = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646 | fr = fr.f_back |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648 | self.__isBroken = True |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650 | self._dbgClient.write('{0}{1}\n'.format(ResponseLine, str(stack))) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651 | self._dbgClient.eventLoop() |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
652 | |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
653 | self.__isBroken = False |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
655 | def user_exception(self, frame, excinfo, unhandled=False): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
657 | 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
|
658 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659 | @param frame the frame object |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660 | @param excinfo information about the exception |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661 | @param unhandled flag indicating an uncaught exception |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663 | 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
|
664 | |
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
|
665 | if exctype in [GeneratorExit, StopIteration]: |
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
|
666 | # 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
|
667 | 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
|
668 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669 | if exctype in [SystemExit, bdb.BdbQuit]: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670 | atexit._run_exitfuncs() |
1475
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
671 | if excval is None: |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
672 | excval = 0 |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
673 | elif isinstance(excval, str): |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
674 | self._dbgClient.write(excval) |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
675 | excval = 1 |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
676 | elif isinstance(excval, bytes): |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
677 | self._dbgClient.write(excval.decode()) |
7e5348c83c9d
Fixed issues formatting the exit value in the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1112
diff
changeset
|
678 | excval = 1 |
12
1d8dd9706f46
First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
0
diff
changeset
|
679 | if isinstance(excval, int): |
1d8dd9706f46
First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
0
diff
changeset
|
680 | self._dbgClient.progTerminated(excval) |
1d8dd9706f46
First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
0
diff
changeset
|
681 | else: |
1d8dd9706f46
First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
0
diff
changeset
|
682 | self._dbgClient.progTerminated(excval.code) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
683 | return |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
684 | |
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
|
685 | if exctype in [SyntaxError, IndentationError]: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686 | try: |
3085
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
687 | message = str(excval) |
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
688 | filename = excval.filename |
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
689 | linenr = excval.lineno |
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
690 | charnr = excval.offset |
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
691 | except (AttributeError, ValueError): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692 | exclist = [] |
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
|
693 | realSyntaxError = True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695 | exclist = [message, [filename, linenr, charnr]] |
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
|
696 | realSyntaxError = os.path.exists(filename) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697 | |
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
|
698 | if realSyntaxError: |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
699 | self._dbgClient.write("{0}{1}\n".format( |
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
700 | ResponseSyntax, str(exclist))) |
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
|
701 | 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
|
702 | 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
|
703 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
704 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
705 | 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
|
706 | str(excval).startswith('maximum recursion depth exceeded') or |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
707 | sys.version_info >= (3, 5) and exctype == RecursionError): |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
708 | 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
|
709 | depth = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
710 | tb = exctb |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
711 | while tb: |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
712 | 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
|
713 | |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
714 | 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
|
715 | __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
|
716 | depth = 1 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
717 | self.skipFrames += depth |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
718 | |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
719 | # 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
|
720 | 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
|
721 | |
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
|
722 | 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
|
723 | |
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
|
724 | 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
|
725 | 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
|
726 | |
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
|
727 | 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
|
728 | 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
|
729 | 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
|
730 | 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
|
731 | try: |
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
|
732 | exclist = [exctypetxt, str(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
|
733 | except TypeError: |
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
|
734 | exclist = [exctypetxt, str(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
|
735 | |
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
|
736 | 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
|
737 | 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
|
738 | frlist.reverse() |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
739 | |
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
|
740 | self.currentFrame = frlist[0] |
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
|
741 | |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
742 | for fr in 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
|
743 | filename = self._dbgClient.absPath(self.fix_frame_filename(fr)) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
744 | |
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
|
745 | if os.path.basename(filename).startswith("DebugClient") or \ |
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
|
746 | os.path.basename(filename) == "bdb.py": |
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
|
747 | break |
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
|
748 | |
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
|
749 | linenr = fr.f_lineno |
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
|
750 | ffunc = fr.f_code.co_name |
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
|
751 | |
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
|
752 | if ffunc == '?': |
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
|
753 | ffunc = '' |
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
|
754 | |
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
|
755 | if ffunc and not ffunc.startswith("<"): |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
756 | argInfo = getargvalues(fr) |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
757 | try: |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4365
diff
changeset
|
758 | fargs = formatargvalues( |
4293
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
759 | argInfo.args, argInfo.varargs, |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
760 | argInfo.keywords, argInfo.locals) |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
761 | except Exception: |
125a75cfd249
Fixed an issue in the debugger backend causing a crash if a class reimplements __repr__ and a breakpoint is set in the __init__() method of such class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4063
diff
changeset
|
762 | fargs = "" |
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
|
763 | 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
|
764 | fargs = "" |
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
|
765 | |
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
|
766 | exclist.append([filename, linenr, ffunc, fargs]) |
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
|
767 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
768 | self._dbgClient.write("{0}{1}\n".format( |
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
769 | ResponseException, str(exclist))) |
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
|
770 | |
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
|
771 | if exctb 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
|
772 | 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
|
773 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
774 | self._dbgClient.eventLoop() |
5050
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
775 | self.skipFrames = 0 |
a6335e924d08
Hide frames belonging to the debugger at a recursion exception.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5048
diff
changeset
|
776 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
777 | def __extractExceptionName(self, exctype): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
778 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
779 | 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
|
780 | type object. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
781 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
782 | @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
|
783 | @return exception name (string) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
784 | """ |
2486
e16c9ced6ae5
Fixed an issue that could cause the debugger backends to crash, if a class redefined __repr__.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
785 | return str(exctype).replace("<class '", "").replace("'>", "") |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
786 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
787 | def __extract_stack(self, exctb): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
788 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
789 | Private member to return a list of stack frames. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
790 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
791 | @param exctb exception traceback |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
792 | @return list of stack frames |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
793 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
794 | tb = exctb |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
795 | stack = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
796 | while tb is not None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
797 | stack.append(tb.tb_frame) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
798 | tb = tb.tb_next |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
799 | tb = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
800 | return stack |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
801 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
802 | def stop_here(self, frame): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
803 | """ |
3591
2f2a4a76dd22
Corrected a bunch of source docu issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3160
diff
changeset
|
804 | Public method reimplemented to filter out debugger files. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
805 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
806 | 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
|
807 | debugger that are called from the application being debugged. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
808 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
809 | @param frame the frame object |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
810 | @return flag indicating whether the debugger should stop here |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
811 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
812 | if self.__skipFrame(frame): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
813 | return False |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
814 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
815 | return bdb.Bdb.stop_here(self, frame) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
816 | |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
817 | 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
|
818 | """ |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
819 | 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
|
820 | |
5007
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
821 | @param enable flag to debug into Python libraries |
e2fa12bb0f53
Don't canonic the filename any more and cache it.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
822 | @type int |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
823 | """ |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
824 | 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
|
825 | # 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
|
826 | if enable: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
827 | 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
|
828 | ("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
|
829 | else: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
830 | 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
|
831 | 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
|
832 | "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
|
833 | 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
|
834 | |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
835 | self.pathsToSkip = tuple(pathsToSkip) |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
836 | |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
837 | def __skipFrame(self, frame): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
838 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
839 | Private method to filter out debugger files. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
840 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
841 | 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
|
842 | debugger that are called from the application being debugged. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
843 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
844 | @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
|
845 | @type frame object |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
846 | @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
|
847 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
848 | """ |
5005
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
849 | try: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
850 | 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
|
851 | except KeyError: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
852 | 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
|
853 | 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
|
854 | return ret |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
855 | except AttributeError: |
684f5ba04f0b
First improvements on debugger speed: Cheaper detection of unwanted files and
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4830
diff
changeset
|
856 | # 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
|
857 | return True |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
858 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
859 | def isBroken(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
860 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
861 | Public method to return the broken state of the debugger. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
862 | |
5012
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
863 | @return flag indicating the broken state |
be693f11da53
Avoid unnecessary function calls.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5007
diff
changeset
|
864 | @rtype bool |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
865 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
866 | return self.__isBroken |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
867 | |
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
868 | # |
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
869 | # eflag: noqa = M702 |