Sat, 13 Mar 2021 19:45:36 +0100
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
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 | |
7923
91e843545d9a
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7915
diff
changeset
|
3 | # Copyright (c) 2002 - 2021 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 a debug client 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 socket |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import select |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | import codeop |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
14 | import codecs |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | import traceback |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | import os |
5174 | 17 | import json |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | import re |
2371
72e2f353f34b
Fixed severe bugs in the coverage integration.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
19 | import atexit |
4366
9445c7cb991f
Implemented a signal handler for the Python debug clients.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4309
diff
changeset
|
20 | import signal |
6847
5150e076014b
DebugClientBase: changed the name reslver of the debug client to overcome slow name resolution issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6735
diff
changeset
|
21 | import time |
7769
c9f64088224b
DebugClientBase: changed code to get rid of the use of the deprecated imp module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
22 | import types |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
23 | import importlib.util |
7901
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7897
diff
changeset
|
24 | import fnmatch |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | import DebugClientCapabilities |
5174 | 28 | import DebugVariables |
723
49ef401db2ce
Changed syntax check to allow to ignore a syntax warning by ending the source line with "__IGNORE_WARNING__" and modified a few files accordingly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
692
diff
changeset
|
29 | from DebugBase import setRecursionLimit, printerr # __IGNORE_WARNING__ |
1112
8a7d1b9d18db
Improved code quality by getting rid of star imports. That way pyflakes can do its job. A few bugs fixed found by flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1029
diff
changeset
|
30 | from AsyncFile import AsyncFile, AsyncPendingWrite |
7862
817ef8e0fa66
Debugger: changed the handling of variable type filters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7836
diff
changeset
|
31 | from DebugConfig import ConfigQtNames, SpecialAttributes |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | from FlexCompleter import Completer |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
33 | from DebugUtilities import prepareJsonCommand |
5041
f00a4c8bcbbd
Breakpoint and Watch and thier basic methods in new classes extracted.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5005
diff
changeset
|
34 | from BreakpointWatch import Breakpoint, Watch |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
35 | from MultiProcessDebugExtension import patchNewProcessFunctions |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
37 | from DebugUtilities import getargvalues, formatargvalues |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | DebugClientInstance = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
41 | ############################################################################### |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
43 | |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
44 | def DebugClientInput(prompt=""): |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
45 | """ |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
46 | Replacement for the standard input() builtin. |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
47 | |
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
48 | This function works with the split debugger. |
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
49 | |
7550
e91462fd0838
Python Debugger: fixed an issue related to redirecting the input() builtin function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7427
diff
changeset
|
50 | @param prompt prompt to be shown |
e91462fd0838
Python Debugger: fixed an issue related to redirecting the input() builtin function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7427
diff
changeset
|
51 | @type str |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
52 | @return result of the input() call |
7550
e91462fd0838
Python Debugger: fixed an issue related to redirecting the input() builtin function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7427
diff
changeset
|
53 | @rtype str |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
54 | """ |
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
55 | if DebugClientInstance is None or not DebugClientInstance.redirect: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | return DebugClientOrigInput(prompt) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
7550
e91462fd0838
Python Debugger: fixed an issue related to redirecting the input() builtin function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7427
diff
changeset
|
58 | return DebugClientInstance.input(prompt) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
60 | # Use our own input(). |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
61 | try: |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
62 | DebugClientOrigInput = __builtins__.__dict__['input'] |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
63 | __builtins__.__dict__['input'] = DebugClientInput |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
64 | except (AttributeError, KeyError): |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
65 | import __main__ |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
66 | DebugClientOrigInput = __main__.__builtins__.__dict__['input'] |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
67 | __main__.__builtins__.__dict__['input'] = DebugClientInput |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
69 | ############################################################################### |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
71 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | def DebugClientClose(fd): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | Replacement for the standard os.close(fd). |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | @param fd open file descriptor to be closed (integer) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | if DebugClientInstance is None: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | DebugClientOrigClose(fd) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | DebugClientInstance.close(fd) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | # use our own close(). |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | if 'close' in dir(os): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | DebugClientOrigClose = os.close |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | os.close = DebugClientClose |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
88 | ############################################################################### |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
90 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | def DebugClientSetRecursionLimit(limit): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | Replacement for the standard sys.setrecursionlimit(limit). |
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 | @param limit recursion limit (integer) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | rl = max(limit, 64) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | setRecursionLimit(rl) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | DebugClientOrigSetRecursionLimit(rl + 64) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | # use our own setrecursionlimit(). |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | if 'setrecursionlimit' in dir(sys): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | DebugClientOrigSetRecursionLimit = sys.setrecursionlimit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | sys.setrecursionlimit = DebugClientSetRecursionLimit |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | DebugClientSetRecursionLimit(sys.getrecursionlimit()) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
107 | ############################################################################### |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
109 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | class DebugClientBase(object): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | Class implementing the client side of the debugger. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
114 | It provides access to the Python interpeter from a debugger running in |
5135
04905a8681dc
Did some cleanup in the modernized debugger code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5131
diff
changeset
|
115 | another process. |
04905a8681dc
Did some cleanup in the modernized debugger code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5131
diff
changeset
|
116 | |
04905a8681dc
Did some cleanup in the modernized debugger code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5131
diff
changeset
|
117 | The protocol between the debugger and the client is based on JSONRPC 2.0 |
04905a8681dc
Did some cleanup in the modernized debugger code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5131
diff
changeset
|
118 | PDUs. Each one is sent on a single line, i.e. commands or responses are |
04905a8681dc
Did some cleanup in the modernized debugger code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5131
diff
changeset
|
119 | separated by a linefeed character. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | If the debugger closes the session there is no response from the client. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | The client may close the session at any time as a result of the script |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | being debugged closing or crashing. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
125 | <b>Note</b>: This class is meant to be subclassed by individual |
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
126 | DebugClient classes. Do not instantiate it directly. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | clientCapabilities = DebugClientCapabilities.HasAll |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | |
5171
f1e9eebd5469
Continued improving the variable dumping of the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5169
diff
changeset
|
130 | # keep these in sync with VariablesViewer.VariableItem.Indicators |
5616
adcffadf4962
Reworked some __IGNORE_WARNING__ comments to be more specific.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5595
diff
changeset
|
131 | Indicators = ("()", "[]", "{:}", "{}") # __IGNORE_WARNING_M613__ |
6988
87ad87ef1910
Make dictionary views expandable.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6980
diff
changeset
|
132 | arrayTypes = { |
87ad87ef1910
Make dictionary views expandable.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6980
diff
changeset
|
133 | 'list', 'tuple', 'dict', 'set', 'frozenset', "class 'dict_items'", |
87ad87ef1910
Make dictionary views expandable.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6980
diff
changeset
|
134 | "class 'dict_keys'", "class 'dict_values'" |
87ad87ef1910
Make dictionary views expandable.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6980
diff
changeset
|
135 | } |
5171
f1e9eebd5469
Continued improving the variable dumping of the debugger backends.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5169
diff
changeset
|
136 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | def __init__(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | Constructor |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | self.breakpoints = {} |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | self.redirect = True |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | # special objects representing the main scripts thread and frame |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | self.mainThread = self |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | self.framenr = 0 |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | # The context to run the debugged program in. |
7769
c9f64088224b
DebugClientBase: changed code to get rid of the use of the deprecated imp module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
149 | self.debugMod = types.ModuleType('__main__') |
3729
b6eda7d63e4c
Debug viewer always active.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3640
diff
changeset
|
150 | self.debugMod.__dict__['__builtins__'] = __builtins__ |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | # The list of complete lines to execute. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | self.buffer = '' |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | # The list of regexp objects to filter variables against |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | self.globalsFilterObjects = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | self.localsFilterObjects = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | |
1706
d0871e278075
Fixed an issue uncovered by the recent change to the DebugClientBase classes (only on Windows).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1607
diff
changeset
|
159 | self._fncache = {} |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | self.dircache = [] |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | self.passive = False # used to indicate the passive mode |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | self.running = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | self.test = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | self.debugging = False |
7409
1413bfe73d41
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7407
diff
changeset
|
165 | self.multiprocessSupport = False |
7411
6d8dcb3551b3
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7409
diff
changeset
|
166 | self.noDebugList = [] |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | self.readstream = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | self.writestream = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | self.errorstream = None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | self.pollingDisabled = False |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | |
7372
021f0252afac
Started the attempt to implement a multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
173 | self.__debuggerId = "" |
2170
f4e0f6133ace
Started implementing the call trace functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2157
diff
changeset
|
174 | |
5046
d57f18f15f1a
Don't track the recursion limit by hand.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5044
diff
changeset
|
175 | self.callTraceEnabled = None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | self.compile_command = codeop.CommandCompiler() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | |
43
2fdc635b106a
Reverted the last change to the Python3 debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
179 | self.coding_re = re.compile(r"coding[:=]\s*([-\w_.]+)") |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | self.defaultCoding = 'utf-8' |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | self.__coding = self.defaultCoding |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | self.noencoding = False |
7376
21df384d6150
Added some inspirations received from Tobias.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7374
diff
changeset
|
183 | |
21df384d6150
Added some inspirations received from Tobias.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7374
diff
changeset
|
184 | self.startOptions = None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | def getCoding(self): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | Public method to return the current coding. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | @return codec name (string) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | return self.__coding |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | def __setCoding(self, filename): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | Private method to set the coding used by a python file. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | @param filename name of the file to inspect (string) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | if self.noencoding: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | self.__coding = sys.getdefaultencoding() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | else: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | default = 'utf-8' |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | try: |
7785
9978016560ec
Changed code to use context manager 'open()' for file operations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7775
diff
changeset
|
205 | with open(filename, 'rb') as f: |
9978016560ec
Changed code to use context manager 'open()' for file operations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7775
diff
changeset
|
206 | # read the first and second line |
9978016560ec
Changed code to use context manager 'open()' for file operations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7775
diff
changeset
|
207 | text = f.readline() |
9978016560ec
Changed code to use context manager 'open()' for file operations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7775
diff
changeset
|
208 | text = "{0}{1}".format(text, f.readline()) |
7836
2f0d208b8137
Changed code to not use the OSError aliases (IOError, EnvironmentError, socket.error and select.error) anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7803
diff
changeset
|
209 | except OSError: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | self.__coding = default |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | return |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
213 | for line in text.splitlines(): |
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
214 | m = self.coding_re.search(line) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | if m: |
43
2fdc635b106a
Reverted the last change to the Python3 debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
216 | self.__coding = m.group(1) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | return |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | self.__coding = default |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
220 | def input(self, prompt, echo=True): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221 | """ |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
222 | Public method to implement input() using the event loop. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | @param prompt the prompt to be shown (string) |
96
9624a110667d
Started to clean up the code supported by py3flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
72
diff
changeset
|
225 | @param echo Flag indicating echoing of the input (boolean) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | @return the entered string |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | """ |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
228 | self.sendJsonCommand("RequestRaw", { |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
229 | "prompt": prompt, |
7639
422fd05e9c91
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7637
diff
changeset
|
230 | "echo": echo, |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
231 | }) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232 | self.eventLoop(True) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | return self.rawLine |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5551
diff
changeset
|
235 | def sessionClose(self, terminate=True): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | """ |
2987
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
237 | Public method to close the session with the debugger and optionally |
c99695c0f13a
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2953
diff
changeset
|
238 | terminate. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5551
diff
changeset
|
240 | @param terminate flag indicating to terminate (boolean) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242 | try: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243 | self.set_quit() |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7594
diff
changeset
|
244 | except Exception: # secok |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245 | pass |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247 | self.debugging = False |
7409
1413bfe73d41
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7407
diff
changeset
|
248 | self.multiprocessSupport = False |
7411
6d8dcb3551b3
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7409
diff
changeset
|
249 | self.noDebugList = [] |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | # make sure we close down our end of the socket |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252 | # might be overkill as normally stdin, stdout and stderr |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253 | # SHOULD be closed on exit, but it does not hurt to do it here |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254 | self.readstream.close(True) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255 | self.writestream.close(True) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256 | self.errorstream.close(True) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5551
diff
changeset
|
258 | if terminate: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259 | # Ok, go away. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | sys.exit() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
935
diff
changeset
|
262 | def __compileFileSource(self, filename, mode='exec'): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | Private method to compile source code read from a file. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
266 | @param filename name of the source file |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
267 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
268 | @param mode kind of code to be generated (exec or eval) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
269 | @type str |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | @return compiled code object (None in case of errors) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | """ |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
272 | with codecs.open(filename, encoding=self.__coding) as fp: |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273 | statement = fp.read() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274 | |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
275 | return self.__compileCommand(statement, filename=filename, mode=mode) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
276 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
277 | def __compileCommand(self, statement, filename="<string>", mode="exec"): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
278 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
279 | Private method to compile source code. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
280 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
281 | @param statement source code string to be compiled |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
282 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
283 | @param filename name of the source file |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
284 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
285 | @param mode kind of code to be generated (exec or eval) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
286 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
287 | @return compiled code object (None in case of errors) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7870
diff
changeset
|
288 | """ |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289 | try: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290 | code = compile(statement + '\n', filename, mode) |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291 | except SyntaxError: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292 | exctype, excval, exctb = sys.exc_info() |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293 | try: |
3085
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
294 | 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
|
295 | filename = excval.filename |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
296 | lineno = excval.lineno |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
297 | charno = excval.offset |
5184
79b3922094ba
Fixed an interesting issue showing up when the code contains an invalid future statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5175
diff
changeset
|
298 | if charno is None: |
79b3922094ba
Fixed an interesting issue showing up when the code contains an invalid future statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5175
diff
changeset
|
299 | charno = 0 |
5239 | 300 | |
3085
4a0f54a64496
Fixed an issue in the Python3 debugger backend handling syntax errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3032
diff
changeset
|
301 | except (AttributeError, ValueError): |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
302 | message = "" |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
303 | filename = "" |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
304 | lineno = 0 |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
305 | charno = 0 |
5239 | 306 | |
7986
2971d5d19951
Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7973
diff
changeset
|
307 | self.sendSyntaxError(message, filename, lineno, charno, self.name) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308 | return None |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310 | return code |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311 | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
312 | def handleJsonCommand(self, jsonStr): |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
313 | """ |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
314 | Public method to handle a command serialized as a JSON string. |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
315 | |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
316 | @param jsonStr string containing the command received from the IDE |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
317 | @type str |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
318 | """ |
7973
e836d196e888
Fixed some code style issues detected by the upgraded eradicate.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7937
diff
changeset
|
319 | ## printerr(jsonStr) ## debug # __IGNORE_WARNING_M891__ |
5966
3325ecd87c7c
Fixed an issue in the debugger backend related to debugging threads.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5964
diff
changeset
|
320 | |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
321 | try: |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
322 | commandDict = json.loads(jsonStr.strip()) |
5162
bbf2bb2d533c
Fixed an issue in the new debugger protocol because JSONDecodeError is defined for Python 3.5 and newer only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5161
diff
changeset
|
323 | except (TypeError, ValueError) as err: |
5966
3325ecd87c7c
Fixed an issue in the debugger backend related to debugging threads.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5964
diff
changeset
|
324 | printerr("Error handling command: " + jsonStr) |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
325 | printerr(str(err)) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
326 | return |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
327 | |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
328 | method = commandDict["method"] |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
329 | params = commandDict["params"] |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
330 | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
331 | if method == "RequestVariables": |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
332 | self.__dumpVariables( |
6969
fd7af2312383
Reimplemented Variables Viewer using QTreeView.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6942
diff
changeset
|
333 | params["frameNumber"], params["scope"], params["filters"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
334 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
335 | elif method == "RequestVariable": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
336 | self.__dumpVariable( |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
337 | params["variable"], params["frameNumber"], |
6969
fd7af2312383
Reimplemented Variables Viewer using QTreeView.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6942
diff
changeset
|
338 | params["scope"], params["filters"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
339 | |
7374
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
340 | elif method == "RequestStack": |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
341 | stack = self.mainThread.getStack() |
7986
2971d5d19951
Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7973
diff
changeset
|
342 | self.sendResponseLine(stack, self.mainThread.name) |
7374
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
343 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
344 | elif method == "RequestThreadList": |
5207
7283629b02c0
Relocated some methods from Debug*Thread and the remaining modules into a new one.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5206
diff
changeset
|
345 | self.dumpThreadList() |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
346 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
347 | elif method == "RequestThreadSet": |
7374
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
348 | if params["threadID"] == -1: |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
349 | # -1 is indication for the main thread |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
350 | threadId = -1 |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
351 | for thread in self.threads.values(): |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
352 | if thread.name == "MainThread": |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
353 | threadId = thread.id |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
354 | else: |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
355 | threadId = params["threadID"] |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
356 | if threadId in self.threads: |
5401ae8ddaa1
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7373
diff
changeset
|
357 | self.setCurrentThread(threadId) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
358 | self.sendJsonCommand("ResponseThreadSet", {}) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
359 | stack = self.currentThread.getStack() |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
360 | self.sendJsonCommand("ResponseStack", { |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
361 | "stack": stack, |
7986
2971d5d19951
Fixed a few thread related issues in the debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7973
diff
changeset
|
362 | "threadName": self.currentThread.name, |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
363 | }) |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
364 | |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
365 | elif method == "RequestDisassembly": |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
366 | if self.disassembly is not None: |
7803
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
367 | self.sendJsonCommand("ResponseDisassembly", { |
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
368 | "disassembly": self.disassembly |
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
369 | }) |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
370 | else: |
7803
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
371 | self.sendJsonCommand("ResponseDisassembly", { |
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
372 | "disassembly": {} |
97f77d69c6f0
Debugger: modified the 'disassembly' interface to ease future extension.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7785
diff
changeset
|
373 | }) |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
374 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
375 | elif method == "RequestCapabilities": |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
376 | clientType = "Python3" |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
377 | self.sendJsonCommand("ResponseCapabilities", { |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
378 | "capabilities": self.__clientCapabilities(), |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
379 | "clientType": clientType |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
380 | }) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
381 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
382 | elif method == "RequestBanner": |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
383 | self.sendJsonCommand("ResponseBanner", { |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
384 | "version": "Python {0}".format(sys.version), |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
385 | "platform": socket.gethostname(), |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
386 | }) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
387 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
388 | elif method == "RequestSetFilter": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
389 | self.__generateFilterObjects(params["scope"], params["filter"]) |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
390 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
391 | elif method == "RequestCallTrace": |
5174 | 392 | if params["enable"]: |
393 | callTraceEnabled = self.profile | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
394 | else: |
5174 | 395 | callTraceEnabled = None |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396 | |
5174 | 397 | if self.debugging: |
398 | sys.setprofile(callTraceEnabled) | |
399 | else: | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
400 | # remember for later |
5174 | 401 | self.callTraceEnabled = callTraceEnabled |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
402 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
403 | elif method == "RequestEnvironment": |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
404 | for key, value in params["environment"].items(): |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
405 | if key.endswith("+"): |
8075 | 406 | # append to the key |
407 | key = key[:-1] | |
408 | if key in os.environ: | |
409 | os.environ[key] += value | |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
410 | else: |
8075 | 411 | os.environ[key] = value |
412 | elif key.endswith("-"): | |
413 | # delete the key if it exists | |
414 | key = key[:-1] | |
415 | if key in os.environ: | |
416 | del os.environ[key] | |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
417 | else: |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
418 | os.environ[key] = value |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
419 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
420 | elif method == "RequestLoad": |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
421 | self._fncache = {} |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
422 | self.dircache = [] |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
423 | self.disassembly = None |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
424 | sys.argv = [] |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
425 | self.__setCoding(params["filename"]) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
426 | sys.argv.append(params["filename"]) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
427 | sys.argv.extend(params["argv"]) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
428 | sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
429 | if params["workdir"] == '': |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
430 | os.chdir(sys.path[1]) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
431 | else: |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
432 | os.chdir(params["workdir"]) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
433 | |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
434 | self.running = sys.argv[0] |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
435 | self.debugging = True |
7409
1413bfe73d41
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7407
diff
changeset
|
436 | self.multiprocessSupport = params["multiprocess"] |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
437 | |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
438 | self.threads.clear() |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
439 | self.attachThread(mainThread=True) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
440 | |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
441 | # set the system exception handling function to ensure, that |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
442 | # we report on all unhandled exceptions |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
443 | sys.excepthook = self.__unhandled_exception |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
444 | self.__interceptSignals() |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
445 | |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
446 | # clear all old breakpoints, they'll get set after we have |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
447 | # started |
5174 | 448 | Breakpoint.clear_all_breaks() |
449 | Watch.clear_all_watches() | |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
450 | |
5174 | 451 | self.mainThread.tracePythonLibs(params["traceInterpreter"]) |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
452 | |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
453 | # This will eventually enter a local event loop. |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
454 | self.debugMod.__dict__['__file__'] = self.running |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
455 | sys.modules['__main__'] = self.debugMod |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
456 | code = self.__compileFileSource(self.running) |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
457 | if code: |
5174 | 458 | sys.setprofile(self.callTraceEnabled) |
7915
e68f5c568aee
Debugger: fixed a few bugs introduced by the multi process debugger changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7903
diff
changeset
|
459 | self.mainThread.run(code, self.debugMod.__dict__, debug=True, |
e68f5c568aee
Debugger: fixed a few bugs introduced by the multi process debugger changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7903
diff
changeset
|
460 | closeSession=False) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
461 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
462 | elif method == "RequestRun": |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
463 | self.disassembly = None |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
464 | sys.argv = [] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
465 | self.__setCoding(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
466 | sys.argv.append(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
467 | sys.argv.extend(params["argv"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
468 | sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
469 | if params["workdir"] == '': |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
470 | os.chdir(sys.path[1]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
471 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
472 | os.chdir(params["workdir"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
473 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
474 | self.running = sys.argv[0] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
475 | self.botframe = None |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
476 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
477 | self.threads.clear() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
478 | self.attachThread(mainThread=True) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
479 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
480 | # set the system exception handling function to ensure, that |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
481 | # we report on all unhandled exceptions |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
482 | sys.excepthook = self.__unhandled_exception |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
483 | self.__interceptSignals() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
484 | |
5174 | 485 | self.mainThread.tracePythonLibs(False) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
486 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
487 | self.debugMod.__dict__['__file__'] = sys.argv[0] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
488 | sys.modules['__main__'] = self.debugMod |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
489 | res = 0 |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
490 | code = self.__compileFileSource(self.running) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
491 | if code: |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
492 | self.mainThread.run(code, self.debugMod.__dict__, debug=False, |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
493 | closeSession=False) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
494 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
495 | elif method == "RequestCoverage": |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7423
diff
changeset
|
496 | from coverage import Coverage |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
497 | self.disassembly = None |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
498 | sys.argv = [] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
499 | self.__setCoding(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
500 | sys.argv.append(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
501 | sys.argv.extend(params["argv"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
502 | sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
503 | if params["workdir"] == '': |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
504 | os.chdir(sys.path[1]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
505 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
506 | os.chdir(params["workdir"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
507 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
508 | # set the system exception handling function to ensure, that |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
509 | # we report on all unhandled exceptions |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
510 | sys.excepthook = self.__unhandled_exception |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
511 | self.__interceptSignals() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
512 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
513 | # generate a coverage object |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7423
diff
changeset
|
514 | self.cover = Coverage( |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
515 | auto_data=True, |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
516 | data_file="{0}.coverage".format( |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
517 | os.path.splitext(sys.argv[0])[0])) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
518 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
519 | if params["erase"]: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
520 | self.cover.erase() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
521 | sys.modules['__main__'] = self.debugMod |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
522 | self.debugMod.__dict__['__file__'] = sys.argv[0] |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
523 | code = self.__compileFileSource(sys.argv[0]) |
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
524 | if code: |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
525 | self.running = sys.argv[0] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
526 | self.cover.start() |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
527 | self.mainThread.run(code, self.debugMod.__dict__, debug=False, |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
528 | closeSession=False) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
529 | self.cover.stop() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
530 | self.cover.save() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
531 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
532 | elif method == "RequestProfile": |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
533 | sys.setprofile(None) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
534 | import PyProfile |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
535 | self.disassembly = None |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
536 | sys.argv = [] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
537 | self.__setCoding(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
538 | sys.argv.append(params["filename"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
539 | sys.argv.extend(params["argv"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
540 | sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
541 | if params["workdir"] == '': |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
542 | os.chdir(sys.path[1]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
543 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
544 | os.chdir(params["workdir"]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
545 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
546 | # set the system exception handling function to ensure, that |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
547 | # we report on all unhandled exceptions |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
548 | sys.excepthook = self.__unhandled_exception |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
549 | self.__interceptSignals() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
550 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
551 | # generate a profile object |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
552 | self.prof = PyProfile.PyProfile(sys.argv[0]) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
553 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
554 | if params["erase"]: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
555 | self.prof.erase() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
556 | self.debugMod.__dict__['__file__'] = sys.argv[0] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
557 | sys.modules['__main__'] = self.debugMod |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
558 | script = '' |
7637
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
559 | with codecs.open(sys.argv[0], encoding=self.__coding) as fp: |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
560 | script = fp.read() |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
561 | if script and not script.endswith('\n'): |
c878e8255972
Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7635
diff
changeset
|
562 | script += '\n' |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
563 | |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
564 | if script: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
565 | self.running = sys.argv[0] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
566 | res = 0 |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
567 | try: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
568 | self.prof.run(script) |
5540
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
569 | atexit._run_exitfuncs() |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
570 | except SystemExit as exc: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
571 | res = exc.code |
5540
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
572 | atexit._run_exitfuncs() |
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
573 | except Exception: |
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
574 | excinfo = sys.exc_info() |
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
575 | self.__unhandled_exception(*excinfo) |
40992b7a60a9
Improved atexit handling.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5536
diff
changeset
|
576 | |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
577 | self.prof.save() |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
578 | self.progTerminated(res, closeSession=False) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
579 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
580 | elif method == "ExecuteStatement": |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
581 | if self.buffer: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
582 | self.buffer = self.buffer + '\n' + params["statement"] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
583 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
584 | self.buffer = params["statement"] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
585 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
586 | try: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
587 | code = self.compile_command(self.buffer, self.readstream.name) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
588 | except (OverflowError, SyntaxError, ValueError): |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
589 | # Report the exception |
7250
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
590 | sys.last_type, sys.last_value, sys.last_traceback = ( |
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
591 | sys.exc_info()) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
592 | self.sendJsonCommand("ClientOutput", { |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
593 | "text": "".join(traceback.format_exception_only( |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
594 | sys.last_type, sys.last_value)) |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
595 | }) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
596 | self.buffer = '' |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
597 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
598 | if code is None: |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
599 | self.sendJsonCommand("ResponseContinue", {}) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
600 | return |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
601 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
602 | self.buffer = '' |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
603 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
604 | try: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
605 | if self.running is None: |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7594
diff
changeset
|
606 | exec(code, self.debugMod.__dict__) # secok |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
607 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
608 | if self.currentThread is None: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
609 | # program has terminated |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
610 | self.running = None |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
611 | _globals = self.debugMod.__dict__ |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
612 | _locals = _globals |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
613 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
614 | cf = self.currentThread.getCurrentFrame() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
615 | # program has terminated |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
616 | if cf is None: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
617 | self.running = None |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
618 | _globals = self.debugMod.__dict__ |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
619 | _locals = _globals |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
620 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
621 | frmnr = self.framenr |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
622 | while cf is not None and frmnr > 0: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
623 | cf = cf.f_back |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
624 | frmnr -= 1 |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
625 | _globals = cf.f_globals |
7250
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
626 | _locals = ( |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
627 | self.currentThread.getFrameLocals( |
7250
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
628 | self.framenr)) |
8159
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
629 | # transfer all locals into a new globals |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
630 | # to emulate Python scoping rules |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
631 | _updatedGlobals = {} |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
632 | _updatedGlobals.update(_globals) |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
633 | _updatedGlobals.update(_locals) |
7973
e836d196e888
Fixed some code style issues detected by the upgraded eradicate.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7937
diff
changeset
|
634 | #- reset sys.stdout to our redirector |
e836d196e888
Fixed some code style issues detected by the upgraded eradicate.py.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7937
diff
changeset
|
635 | #- (unconditionally) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
636 | if "sys" in _globals: |
8159
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
637 | __stdout = _updatedGlobals["sys"].stdout |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
638 | _updatedGlobals["sys"].stdout = ( |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
639 | self.writestream |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
640 | ) |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
641 | exec(code, _updatedGlobals, _locals) # secok |
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
642 | _updatedGlobals["sys"].stdout = __stdout |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
643 | elif "sys" in _locals: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
644 | __stdout = _locals["sys"].stdout |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
645 | _locals["sys"].stdout = self.writestream |
8159
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
646 | exec(code, _updatedGlobals, _locals) # secok |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
647 | _locals["sys"].stdout = __stdout |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
648 | else: |
8159
08b8b3d2deb1
DebugClientBase: fixed an issue related to the Python scoping rules. Needed to emulate it in the debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8075
diff
changeset
|
649 | exec(code, _updatedGlobals, _locals) # secok |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
650 | |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
651 | self.currentThread.storeFrameLocals(self.framenr) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
652 | except SystemExit as exc: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
653 | self.progTerminated(exc.code) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
654 | except Exception: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
655 | # Report the exception and the traceback |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
656 | tlist = [] |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
657 | try: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
658 | exc_type, exc_value, exc_tb = sys.exc_info() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
659 | sys.last_type = exc_type |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
660 | sys.last_value = exc_value |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
661 | sys.last_traceback = exc_tb |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
662 | tblist = traceback.extract_tb(exc_tb) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
663 | del tblist[:1] |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
664 | tlist = traceback.format_list(tblist) |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
665 | if tlist: |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
666 | tlist.insert( |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
667 | 0, "Traceback (innermost last):\n") |
5131
889ed5ff7a68
Fixed a few issues in the modernized Python 3 debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5129
diff
changeset
|
668 | tlist.extend(traceback.format_exception_only( |
889ed5ff7a68
Fixed a few issues in the modernized Python 3 debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5129
diff
changeset
|
669 | exc_type, exc_value)) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
670 | finally: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
671 | tblist = exc_tb = None |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
672 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
673 | self.sendJsonCommand("ClientOutput", { |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
674 | "text": "".join(tlist) |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
675 | }) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
676 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
677 | self.sendJsonCommand("ResponseOK", {}) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
678 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
679 | elif method == "RequestStep": |
5221
960afd19c1b6
Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5207
diff
changeset
|
680 | self.currentThreadExec.step(True) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
681 | self.eventExit = True |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
682 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
683 | elif method == "RequestStepOver": |
5221
960afd19c1b6
Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5207
diff
changeset
|
684 | self.currentThreadExec.step(False) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
685 | self.eventExit = True |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
686 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
687 | elif method == "RequestStepOut": |
5221
960afd19c1b6
Give the next debugger command to the thread where we are stopped at the moment.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5207
diff
changeset
|
688 | self.currentThreadExec.stepOut() |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
689 | self.eventExit = True |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
690 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
691 | elif method == "RequestStepQuit": |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
692 | if self.passive: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
693 | self.progTerminated(42) |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
694 | else: |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
695 | self.set_quit() |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
696 | self.eventExit = True |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
697 | |
5658
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5657
diff
changeset
|
698 | elif method == "RequestMoveIP": |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5657
diff
changeset
|
699 | newLine = params["newLine"] |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5657
diff
changeset
|
700 | self.currentThreadExec.move_instruction_pointer(newLine) |
e5f6fe5855fd
move the instruction pointer within the current function (Hotkey: F12)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5657
diff
changeset
|
701 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
702 | elif method == "RequestContinue": |
5551
16f9a0bccda1
In rare cases the wrong thread could issued to continue.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5540
diff
changeset
|
703 | self.currentThreadExec.go(params["special"]) |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
704 | self.eventExit = True |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
705 | |
7897
9acc015ea443
Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
706 | elif method == "RequestContinueUntil": |
9acc015ea443
Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
707 | newLine = params["newLine"] |
9acc015ea443
Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
708 | self.currentThreadExec.set_until(lineno=newLine) |
9acc015ea443
Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
709 | self.eventExit = True |
9acc015ea443
Debugger: added support for the "Continue Until" debug action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
710 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
711 | elif method == "RawInput": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
712 | # If we are handling raw mode input then break out of the current |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
713 | # event loop. |
5120
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
714 | self.rawLine = params["input"] |
c5189d404cc7
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5119
diff
changeset
|
715 | self.eventExit = True |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
716 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
717 | elif method == "RequestBreakpoint": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
718 | if params["setBreakpoint"]: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
719 | if params["condition"] in ['None', '']: |
5174 | 720 | cond = None |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
721 | elif params["condition"] is not None: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
722 | try: |
5174 | 723 | cond = compile(params["condition"], '<string>', 'eval') |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
724 | except SyntaxError: |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
725 | self.sendJsonCommand("ResponseBPConditionError", { |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
726 | "filename": params["filename"], |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
727 | "line": params["line"], |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
728 | }) |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
729 | return |
5174 | 730 | else: |
731 | cond = None | |
732 | ||
733 | Breakpoint( | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
734 | params["filename"], params["line"], params["temporary"], |
5174 | 735 | cond) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
736 | else: |
5174 | 737 | Breakpoint.clear_break(params["filename"], params["line"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
738 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
739 | elif method == "RequestBreakpointEnable": |
5174 | 740 | bp = Breakpoint.get_break(params["filename"], params["line"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
741 | if bp is not None: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
742 | if params["enable"]: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
743 | bp.enable() |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
744 | else: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
745 | bp.disable() |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
746 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
747 | elif method == "RequestBreakpointIgnore": |
5174 | 748 | bp = Breakpoint.get_break(params["filename"], params["line"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
749 | if bp is not None: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
750 | bp.ignore = params["count"] |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
751 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
752 | elif method == "RequestWatch": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
753 | if params["setWatch"]: |
5174 | 754 | if params["condition"].endswith( |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
755 | ('??created??', '??changed??')): |
5174 | 756 | compiledCond, flag = params["condition"].split() |
757 | else: | |
758 | compiledCond = params["condition"] | |
759 | flag = '' | |
760 | ||
761 | try: | |
5179
5f56410e7624
Combined version of the Python debugger.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
762 | compiledCond = compile(compiledCond, '<string>', 'eval') |
5174 | 763 | except SyntaxError: |
764 | self.sendJsonCommand("ResponseWatchConditionError", { | |
765 | "condition": params["condition"], | |
766 | }) | |
767 | return | |
768 | Watch( | |
769 | params["condition"], compiledCond, flag, | |
770 | params["temporary"]) | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
771 | else: |
5174 | 772 | Watch.clear_watch(params["condition"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
773 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
774 | elif method == "RequestWatchEnable": |
5174 | 775 | wp = Watch.get_watch(params["condition"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
776 | if wp is not None: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
777 | if params["enable"]: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
778 | wp.enable() |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
779 | else: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
780 | wp.disable() |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
781 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
782 | elif method == "RequestWatchIgnore": |
5174 | 783 | wp = Watch.get_watch(params["condition"]) |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
784 | if wp is not None: |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
785 | wp.ignore = params["count"] |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
786 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
787 | elif method == "RequestShutdown": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
788 | self.sessionClose() |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
789 | |
7411
6d8dcb3551b3
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7409
diff
changeset
|
790 | elif method == "RequestSetNoDebugList": |
6d8dcb3551b3
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7409
diff
changeset
|
791 | self.noDebugList = params["noDebug"][:] |
6d8dcb3551b3
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7409
diff
changeset
|
792 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
793 | elif method == "RequestCompletion": |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
794 | self.__completionList(params["text"]) |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
795 | |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
796 | elif method == "RequestUTDiscover": |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
797 | if params["syspath"]: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
798 | sys.path = params["syspath"] + sys.path |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
799 | |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
800 | discoveryStart = params["discoverystart"] |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
801 | if not discoveryStart: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
802 | discoveryStart = params["workdir"] |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
803 | |
7071
c9ff30a1acbb
Fix unittest discovery, allow discovery start in project subdirectory.
Mikhail Terekhov
parents:
7031
diff
changeset
|
804 | top_level_dir = params["workdir"] |
c9ff30a1acbb
Fix unittest discovery, allow discovery start in project subdirectory.
Mikhail Terekhov
parents:
7031
diff
changeset
|
805 | |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
806 | os.chdir(params["discoverystart"]) |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
807 | |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
808 | # set the system exception handling function to ensure, that |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
809 | # we report on all unhandled exceptions |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
810 | sys.excepthook = self.__unhandled_exception |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
811 | self.__interceptSignals() |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
812 | |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
813 | try: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
814 | import unittest |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
815 | testLoader = unittest.TestLoader() |
7074
7da5a5a14469
Fixed a code style issue in Mikhails changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7071
diff
changeset
|
816 | test = testLoader.discover( |
7da5a5a14469
Fixed a code style issue in Mikhails changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7071
diff
changeset
|
817 | discoveryStart, top_level_dir=top_level_dir) |
7250
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
818 | if (hasattr(testLoader, "errors") and |
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
819 | bool(testLoader.errors)): |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
820 | self.sendJsonCommand("ResponseUTDiscover", { |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
821 | "testCasesList": [], |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
822 | "exception": "DiscoveryError", |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
823 | "message": "\n\n".join(testLoader.errors), |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
824 | }) |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
825 | else: |
6908
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
826 | testsList = self.__assembleTestCasesList(test, |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
827 | discoveryStart) |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
828 | self.sendJsonCommand("ResponseUTDiscover", { |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
829 | "testCasesList": testsList, |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
830 | "exception": "", |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
831 | "message": "", |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
832 | }) |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
833 | except Exception: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
834 | exc_type, exc_value, exc_tb = sys.exc_info() |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
835 | self.sendJsonCommand("ResponseUTDiscover", { |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
836 | "testCasesList": [], |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
837 | "exception": exc_type.__name__, |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
838 | "message": str(exc_value), |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
839 | }) |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
840 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
841 | elif method == "RequestUTPrepare": |
6892
c147620313c5
UnittestDialog: fixed an issue running tests for a project and removed the (obsolete) 'local' option.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6849
diff
changeset
|
842 | if params["syspath"]: |
c147620313c5
UnittestDialog: fixed an issue running tests for a project and removed the (obsolete) 'local' option.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6849
diff
changeset
|
843 | sys.path = params["syspath"] + sys.path |
7071
c9ff30a1acbb
Fix unittest discovery, allow discovery start in project subdirectory.
Mikhail Terekhov
parents:
7031
diff
changeset
|
844 | top_level_dir = None |
6894
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
845 | if params["workdir"]: |
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
846 | os.chdir(params["workdir"]) |
7071
c9ff30a1acbb
Fix unittest discovery, allow discovery start in project subdirectory.
Mikhail Terekhov
parents:
7031
diff
changeset
|
847 | top_level_dir = params["workdir"] |
5131
889ed5ff7a68
Fixed a few issues in the modernized Python 3 debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5129
diff
changeset
|
848 | |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
849 | # set the system exception handling function to ensure, that |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
850 | # we report on all unhandled exceptions |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
851 | sys.excepthook = self.__unhandled_exception |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
852 | self.__interceptSignals() |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
853 | |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
854 | try: |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
855 | import unittest |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
856 | testLoader = unittest.TestLoader() |
6897
701256697721
UnittestDialog: refined the handling of "Rerun Failed".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6896
diff
changeset
|
857 | if params["discover"]: |
6894
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
858 | discoveryStart = params["discoverystart"] |
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
859 | if not discoveryStart: |
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
860 | discoveryStart = params["workdir"] |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
861 | sys.path.insert( |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
862 | 0, os.path.abspath(discoveryStart)) |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
863 | if params["testcases"]: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
864 | self.test = testLoader.loadTestsFromNames( |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
865 | params["testcases"]) |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
866 | else: |
7074
7da5a5a14469
Fixed a code style issue in Mikhails changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7071
diff
changeset
|
867 | self.test = testLoader.discover( |
7da5a5a14469
Fixed a code style issue in Mikhails changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7071
diff
changeset
|
868 | discoveryStart, top_level_dir=top_level_dir) |
6894
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
869 | else: |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
870 | sys.path.insert( |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
871 | 0, |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
872 | os.path.dirname(os.path.abspath(params["filename"])) |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
873 | ) |
6896
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
874 | if params["filename"]: |
7769
c9f64088224b
DebugClientBase: changed code to get rid of the use of the deprecated imp module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
875 | spec = importlib.util.spec_from_file_location( |
6896
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
876 | params["testname"], params["filename"]) |
7769
c9f64088224b
DebugClientBase: changed code to get rid of the use of the deprecated imp module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
877 | utModule = importlib.util.module_from_spec(spec) |
6896
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
878 | else: |
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
879 | utModule = None |
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
880 | if params["failed"]: |
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
881 | if utModule: |
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
882 | failed = [t.split(".", 1)[1] |
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
883 | for t in params["failed"]] |
6894
df83ac87e0db
UnittestDialog: added capability to auto-discover tests.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6892
diff
changeset
|
884 | else: |
6896
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
885 | failed = params["failed"][:] |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
886 | self.test = testLoader.loadTestsFromNames( |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
887 | failed, utModule) |
6896
3716c4af48bb
UnittestDialog: did some refinements and error corrections.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6894
diff
changeset
|
888 | else: |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
889 | self.test = testLoader.loadTestsFromName( |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
890 | params["testfunctionname"], utModule) |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
891 | except Exception: |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
892 | exc_type, exc_value, exc_tb = sys.exc_info() |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
893 | self.sendJsonCommand("ResponseUTPrepared", { |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
894 | "count": 0, |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
895 | "exception": exc_type.__name__, |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
896 | "message": str(exc_value), |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
897 | }) |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
898 | return |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
899 | |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
900 | # generate a coverage object |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
901 | if params["coverage"]: |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7423
diff
changeset
|
902 | from coverage import Coverage |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7423
diff
changeset
|
903 | self.cover = Coverage( |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
904 | auto_data=True, |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
905 | data_file="{0}.coverage".format( |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
906 | os.path.splitext(params["coveragefile"])[0])) |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
907 | if params["coverageerase"]: |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
908 | self.cover.erase() |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
909 | else: |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
910 | self.cover = None |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
911 | |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
912 | if params["debug"]: |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
913 | Breakpoint.clear_all_breaks() |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
914 | Watch.clear_all_watches() |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
915 | |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
916 | self.sendJsonCommand("ResponseUTPrepared", { |
5125
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
917 | "count": self.test.countTestCases(), |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
918 | "exception": "", |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
919 | "message": "", |
eb1b3e0577e4
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5124
diff
changeset
|
920 | }) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
921 | |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
922 | elif method == "RequestUTRun": |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
923 | from DCTestResult import DCTestResult |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
924 | self.disassembly = None |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
925 | self.testResult = DCTestResult(self, params["failfast"]) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
926 | if self.cover: |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
927 | self.cover.start() |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
928 | self.debugging = params["debug"] |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
929 | if params["debug"]: |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
930 | locals_ = locals() |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
931 | self.threads.clear() |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
932 | self.attachThread(mainThread=True) |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
933 | sys.setprofile(None) |
8030
b356d92d4e02
DebugClientBase: corrected the code running unit tests within the debugger to be able to access variables from within the shell pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7986
diff
changeset
|
934 | self.running = sys.argv[0] |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
935 | self.mainThread.run( |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
936 | "result = self.test.run(self.testResult)\n", |
8030
b356d92d4e02
DebugClientBase: corrected the code running unit tests within the debugger to be able to access variables from within the shell pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7986
diff
changeset
|
937 | self.debugMod.__dict__, |
b356d92d4e02
DebugClientBase: corrected the code running unit tests within the debugger to be able to access variables from within the shell pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7986
diff
changeset
|
938 | localsDict=locals_, |
b356d92d4e02
DebugClientBase: corrected the code running unit tests within the debugger to be able to access variables from within the shell pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7986
diff
changeset
|
939 | debug=True, |
b356d92d4e02
DebugClientBase: corrected the code running unit tests within the debugger to be able to access variables from within the shell pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7986
diff
changeset
|
940 | closeSession=False) |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
941 | result = locals_["result"] |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
942 | else: |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
943 | result = self.test.run(self.testResult) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
944 | if self.cover: |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
945 | self.cover.stop() |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
946 | self.cover.save() |
6904
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
947 | self.sendJsonCommand("ResponseUTFinished", { |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
948 | "status": 0 if result.wasSuccessful() else 1, |
3f35037a08d4
Unit Test: added capability to run test with debugger support and to stop the test on the first error or failure.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6901
diff
changeset
|
949 | }) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
950 | |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
951 | elif method == "RequestUTStop": |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
952 | self.testResult.stop() |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
953 | |
6908
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
954 | def __assembleTestCasesList(self, suite, start): |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
955 | """ |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
956 | Private method to assemble a list of test cases included in a test |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
957 | suite. |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
958 | |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
959 | @param suite test suite to be inspected |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
960 | @type unittest.TestSuite |
6908
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
961 | @param start name of directory discovery was started at |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
962 | @type str |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
963 | @return list of tuples containing the test case ID, a short description |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
964 | and the path of the test file name |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
965 | @rtype list of tuples of (str, str, str) |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
966 | """ |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
967 | import unittest |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
968 | testCases = [] |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
969 | for test in suite: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
970 | if isinstance(test, unittest.TestSuite): |
6908
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
971 | testCases.extend(self.__assembleTestCasesList(test, start)) |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
972 | else: |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
973 | testId = test.id() |
7250
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
974 | if ("ModuleImportFailure" not in testId and |
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
975 | "LoadTestsFailure" not in testId and |
d8bdc55aee1a
Started to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7249
diff
changeset
|
976 | "_FailedTest" not in testId): |
6908
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
977 | filename = os.path.join( |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
978 | start, |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
979 | test.__module__.replace(".", os.sep) + ".py") |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
980 | testCases.append( |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
981 | (test.id(), test.shortDescription(), filename) |
a56b500d7d2d
UnittestDialog: added a message for the situation, where discovery results are present but none are selected when Start is pressed and added the capability to open the source file by double clicking a discovery entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6904
diff
changeset
|
982 | ) |
6901
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
983 | return testCases |
f2c774c8db7e
UnittestDialog: implemented the remote part fo 'discover only'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6899
diff
changeset
|
984 | |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
985 | def setDisassembly(self, disassembly): |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
986 | """ |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
987 | Public method to store a disassembly of the code object raising an |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
988 | exception. |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
989 | |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
990 | @param disassembly dictionary containing the disassembly information |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
991 | @type dict |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
992 | """ |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
993 | self.disassembly = disassembly |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
994 | |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
995 | def sendJsonCommand(self, method, params): |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
996 | """ |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
997 | Public method to send a single command or response to the IDE. |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
998 | |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
999 | @param method command or response command name to be sent |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
1000 | @type str |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
1001 | @param params dictionary of named parameters for the command or |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
1002 | response |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
1003 | @type dict |
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
1004 | """ |
7373
d036d72f457c
Changed 'id' to 'debuggerId'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7372
diff
changeset
|
1005 | # send debugger ID with all responses |
d036d72f457c
Changed 'id' to 'debuggerId'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7372
diff
changeset
|
1006 | if "debuggerId" not in params: |
d036d72f457c
Changed 'id' to 'debuggerId'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7372
diff
changeset
|
1007 | params["debuggerId"] = self.__debuggerId |
d036d72f457c
Changed 'id' to 'debuggerId'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7372
diff
changeset
|
1008 | |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5128
diff
changeset
|
1009 | cmd = prepareJsonCommand(method, params) |
5128
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
1010 | |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
1011 | self.writestream.write_p(cmd) |
b6cbdba69967
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5125
diff
changeset
|
1012 | self.writestream.flush() |
5119
80bd41498eef
Started with the modernization of the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5115
diff
changeset
|
1013 | |
5124
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
1014 | def sendClearTemporaryBreakpoint(self, filename, lineno): |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
1015 | """ |
1ba8ee313b57
Continued modernizing the debugger interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5120
diff
changeset
|
1016 | Public method to signal the deletion of a temporary breakpoint. |