Fri, 01 Jan 2021 16:25:30 +0100
Debugger: fixed an issue related to multiprocessing on Windows and macOS because these use the 'spawn' method.
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
7923
91e843545d9a
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7900
diff
changeset
|
3 | # Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing utilities functions for the debug client. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
5258
cfca063afa07
Optimizations in sending data in AsyncFile. Also thread save.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
10 | import json |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
11 | import os |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
12 | import traceback |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
13 | import sys |
5258
cfca063afa07
Optimizations in sending data in AsyncFile. Also thread save.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
14 | |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | # |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | # Taken from inspect.py of Python 3.4 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | # |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | from collections import namedtuple |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | from inspect import iscode, isframe |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | # Create constants for the compiler flags in Include/code.h |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | # We try to get them from dis to avoid duplication, but fall |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | # back to hardcoding so the dependency is optional |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | try: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | from dis import COMPILER_FLAG_NAMES |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | except ImportError: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | CO_OPTIMIZED, CO_NEWLOCALS = 0x1, 0x2 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | else: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | mod_dict = globals() |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | for k, v in COMPILER_FLAG_NAMES.items(): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | mod_dict["CO_" + v] = k |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | ArgInfo = namedtuple('ArgInfo', 'args varargs keywords locals') |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | def getargvalues(frame): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Function to get information about arguments passed into a |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | particular frame. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @param frame reference to a frame object to be processed |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | @type frame |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @return tuple of four things, where 'args' is a list of the argument names, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | 'varargs' and 'varkw' are the names of the * and ** arguments or None |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | and 'locals' is the locals dictionary of the given frame. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | @exception TypeError raised if the input parameter is not a frame object |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | if not isframe(frame): |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
52 | raise TypeError('{0!r} is not a frame object'.format(frame)) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | args, varargs, kwonlyargs, varkw = _getfullargs(frame.f_code) |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | return ArgInfo(args + kwonlyargs, varargs, varkw, frame.f_locals) |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | def _getfullargs(co): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | Protected function to get information about the arguments accepted |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | by a code object. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | @param co reference to a code object to be processed |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | @type code |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | @return tuple of four things, where 'args' and 'kwonlyargs' are lists of |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | argument names, and 'varargs' and 'varkw' are the names of the |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | * and ** arguments or None. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | @exception TypeError raised if the input parameter is not a code object |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | if not iscode(co): |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
71 | raise TypeError('{0!r} is not a code object'.format(co)) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | nargs = co.co_argcount |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | names = co.co_varnames |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | nkwargs = co.co_kwonlyargcount |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | args = list(names[:nargs]) |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | kwonlyargs = list(names[nargs:nargs + nkwargs]) |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | nargs += nkwargs |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | varargs = None |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | if co.co_flags & CO_VARARGS: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | varargs = co.co_varnames[nargs] |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | nargs = nargs + 1 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | varkw = None |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | if co.co_flags & CO_VARKEYWORDS: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | varkw = co.co_varnames[nargs] |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | return args, varargs, kwonlyargs, varkw |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
90 | def formatargvalues(args, varargs, varkw, localsDict, |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | formatarg=str, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | formatvarargs=lambda name: '*' + name, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | formatvarkw=lambda name: '**' + name, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | formatvalue=lambda value: '=' + repr(value)): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | Function to format an argument spec from the 4 values returned |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | by getargvalues. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | @param args list of argument names |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | @type list of str |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | @param varargs name of the variable arguments |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | @type str |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | @param varkw name of the keyword arguments |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | @type str |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
105 | @param localsDict reference to the local variables dictionary |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | @type dict |
7900
72b88fb20261
Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
107 | @param formatarg argument formatting function |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | @type func |
7900
72b88fb20261
Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
109 | @param formatvarargs variable arguments formatting function |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | @type func |
7900
72b88fb20261
Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
111 | @param formatvarkw keyword arguments formatting function |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | @type func |
7900
72b88fb20261
Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7895
diff
changeset
|
113 | @param formatvalue value formating functtion |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | @type func |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | @return formatted call signature |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | @rtype str |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | specs = [] |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | for i in range(len(args)): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | name = args[i] |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
121 | specs.append(formatarg(name) + formatvalue(localsDict[name])) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | if varargs: |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
123 | specs.append(formatvarargs(varargs) + formatvalue(localsDict[varargs])) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | if varkw: |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
125 | specs.append(formatvarkw(varkw) + formatvalue(localsDict[varkw])) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | argvalues = '(' + ', '.join(specs) + ')' |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
127 | if '__return__' in localsDict: |
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
128 | argvalues += " -> " + formatvalue(localsDict['__return__']) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | return argvalues |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
130 | |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
131 | |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
132 | def prepareJsonCommand(method, params): |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
133 | """ |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
134 | Function to prepare a single command or response for transmission to |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
135 | the IDE. |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
136 | |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
137 | @param method command or response name to be sent |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
138 | @type str |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
139 | @param params dictionary of named parameters for the command or response |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
140 | @type dict |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
141 | @return prepared JSON command or response string |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
142 | @rtype str |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
143 | """ |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
144 | commandDict = { |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
145 | "jsonrpc": "2.0", |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
146 | "method": method, |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
147 | "params": params, |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
148 | } |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
149 | return json.dumps(commandDict) + '\n' |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
150 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
151 | ########################################################################### |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
152 | ## Things related to monkey patching below |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
153 | ########################################################################### |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
154 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
155 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
156 | PYTHON_NAMES = ["python", "pypy"] |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
157 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
158 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
159 | def isWindowsPlatform(): |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
160 | """ |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
161 | Function to check, if this is a Windows platform. |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
162 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
163 | @return flag indicating Windows platform |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
164 | @rtype bool |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
165 | """ |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
166 | return sys.platform.startswith(("win", "cygwin")) |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
167 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
168 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
169 | def isExecutable(program): |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
170 | """ |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
171 | Function to check, if the given program is executable. |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
172 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
173 | @param program program path to be checked |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
174 | @type str |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
175 | @return flag indicating an executable program |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
176 | @rtype bool |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
177 | """ |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
178 | return os.access(os.path.abspath(program), os.X_OK) |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
179 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
180 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
181 | def startsWithShebang(program): |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
182 | """ |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
183 | Function to check, if the given program start with a Shebang line. |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
184 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
185 | @param program program path to be checked |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
186 | @type str |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
187 | @return flag indicating an existing and valid shebang line |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
188 | @rtype bool |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
189 | """ |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
190 | try: |
7892
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
191 | if os.path.exists(program): |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
192 | with open(program) as f: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
193 | for line in f: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
194 | line = line.strip() |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
195 | if line: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
196 | for name in PYTHON_NAMES: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
197 | if line.startswith( |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
198 | '#!/usr/bin/env {0}'.format(name) |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
199 | ): |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
200 | return True |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
201 | elif line.startswith('#!') and name in line: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
202 | return True |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
203 | return False |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
204 | else: |
bd6b9e401166
DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7873
diff
changeset
|
205 | return False |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
206 | except UnicodeDecodeError: |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
207 | return False |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
208 | except Exception: |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
209 | traceback.print_exc() |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
210 | return False |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
211 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
212 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
213 | def isPythonProgram(program): |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
214 | """ |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
215 | Function to check, if the given program is a Python interpreter or |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
216 | program. |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
217 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
218 | @param program program to be checked |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
219 | @type str |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
220 | @return flag indicating a Python interpreter or program |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
221 | @rtype bool |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
222 | """ |
7421
4a9900aef04e
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7420
diff
changeset
|
223 | if not program: |
4a9900aef04e
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7420
diff
changeset
|
224 | return False |
4a9900aef04e
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7420
diff
changeset
|
225 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
226 | prog = os.path.basename(program).lower() |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
227 | for pyname in PYTHON_NAMES: |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
228 | if pyname in prog: |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
229 | return True |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
230 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
231 | return ( |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
232 | not isWindowsPlatform() and |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
233 | isExecutable(program) and |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
234 | startsWithShebang(program) |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
235 | ) |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
236 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
237 | |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
238 | def removeQuotesFromArgs(args): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
239 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
240 | Function to remove quotes from the arguments list. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
241 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
242 | @param args list of arguments |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
243 | @type list of str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
244 | @return list of unquoted strings |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
245 | @rtype list of str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
246 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
247 | if isWindowsPlatform(): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
248 | newArgs = [] |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
249 | for x in args: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
250 | if len(x) > 1 and x.startswith('"') and x.endswith('"'): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
251 | x = x[1:-1] |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
252 | newArgs.append(x) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
253 | return newArgs |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
254 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
255 | return args |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
256 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
257 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
258 | def quoteArgs(args): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
259 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
260 | Function to quote the given list of arguments. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
261 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
262 | @param args list of arguments to be quoted |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
263 | @type list of str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
264 | @return list of quoted arguments |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
265 | @rtype list of str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
266 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
267 | if isWindowsPlatform(): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
268 | quotedArgs = [] |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
269 | for x in args: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
270 | if x.startswith('"') and x.endswith('"'): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
271 | quotedArgs.append(x) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
272 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
273 | if ' ' in x: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
274 | x = x.replace('"', '\\"') |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
275 | quotedArgs.append('"{0}"'.format(x)) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
276 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
277 | quotedArgs.append(x) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
278 | return quotedArgs |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
279 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
280 | return args |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
281 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
282 | |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
283 | def patchArguments(debugClient, arguments, noRedirect=False): |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
284 | """ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
285 | Function to patch the arguments given to start a program in order to |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
286 | execute it in our debugger. |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
287 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
288 | @param debugClient reference to the debug client object |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
289 | @type DebugClient |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
290 | @param arguments list of program arguments |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
291 | @type list of str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
292 | @param noRedirect flag indicating to not redirect stdin and stdout |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
293 | @type bool |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
294 | @return modified argument list |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
295 | @rtype list of str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
296 | """ |
7873
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
297 | debugClientScript = os.path.join( |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
298 | os.path.dirname(__file__), "DebugClient.py") |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
299 | if debugClientScript in arguments: |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
300 | # it is already patched |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
301 | return arguments |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
302 | |
7422
9a008ab4811b
Started implementing the patching of the os module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7421
diff
changeset
|
303 | args = list(arguments[:]) # create a copy of the arguments list |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
304 | args = removeQuotesFromArgs(args) |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
305 | |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
306 | # support for shebang line |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
307 | program = os.path.basename(args[0]).lower() |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
308 | for pyname in PYTHON_NAMES: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
309 | if pyname in program: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
310 | break |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
311 | else: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
312 | if not isWindowsPlatform() and startsWithShebang(args[0]): |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
313 | # insert our interpreter as first argument |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
314 | args.insert(0, sys.executable) |
7873
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
315 | elif isWindowsPlatform() and args[0].lower().endswith(".py"): |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
316 | # it is a Python script; insert our interpreter as first argument |
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
317 | args.insert(0, sys.executable) |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
318 | |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
319 | # extract list of interpreter arguments, i.e. all arguments before the |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
320 | # first one not starting with '-'. |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
321 | interpreter = args.pop(0) |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
322 | interpreterArgs = [] |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
323 | hasCode = False |
7895
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
324 | hasScriptModule = False |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
325 | while args: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
326 | if args[0].startswith("-"): |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
327 | if args[0] in ("-W", "-X"): |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
328 | # take two elements off the list |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
329 | interpreterArgs.append(args.pop(0)) |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
330 | interpreterArgs.append(args.pop(0)) |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
331 | elif args[0] == "-c": |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
332 | # -c indicates code to be executed and ends the |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
333 | # arguments list |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
334 | args.pop(0) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
335 | hasCode = True |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
336 | break |
7895
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
337 | elif args[0] == "-m": |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
338 | # -m indicates a module to be executed as a script |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
339 | # and ends the arguments list |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
340 | args.pop(0) |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
341 | hasScriptModule = True |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
342 | break |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
343 | else: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
344 | interpreterArgs.append(args.pop(0)) |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
345 | else: |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
346 | break |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
347 | |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
348 | (wd, host, port, exceptions, tracePython, redirect, noencoding |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
349 | ) = debugClient.startOptions[:7] |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
350 | |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
351 | modifiedArguments = [interpreter] |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
352 | modifiedArguments.extend(interpreterArgs) |
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
353 | modifiedArguments.extend([ |
7873
cb2badbdf26c
MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7871
diff
changeset
|
354 | debugClientScript, |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
355 | "-h", host, |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
356 | "-p", str(port), |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
357 | "--no-passive", |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
358 | ]) |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
359 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
360 | if wd: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
361 | modifiedArguments.extend(["-w", wd]) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
362 | if not exceptions: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
363 | modifiedArguments.append("-e") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
364 | if tracePython: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
365 | modifiedArguments.append("-t") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
366 | if noRedirect or not redirect: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
367 | modifiedArguments.append("-n") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
368 | if noencoding: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
369 | modifiedArguments.append("--no-encoding") |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
370 | if debugClient.multiprocessSupport: |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
371 | modifiedArguments.append("--multiprocess") |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
372 | if hasCode: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
373 | modifiedArguments.append("--code") |
7895
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
374 | modifiedArguments.append(args.pop(0)) |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
375 | if hasScriptModule: |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
376 | modifiedArguments.append("--module") |
554fdb07c856
Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7892
diff
changeset
|
377 | modifiedArguments.append(args.pop(0)) |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
378 | modifiedArguments.append("--") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
379 | # end the arguments for DebugClient |
7419
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
380 | |
9c1163735448
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7412
diff
changeset
|
381 | # append the arguments for the program to be debugged |
7420
0d596bb4a60d
Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7419
diff
changeset
|
382 | modifiedArguments.extend(args) |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
383 | modifiedArguments = quoteArgs(modifiedArguments) |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
384 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
385 | return modifiedArguments |
7871
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
386 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
387 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
388 | def stringToArgumentsWindows(args): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
389 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
390 | Function to prepare a string of arguments for Windows platform. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
391 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
392 | @param args list of command arguments |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
393 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
394 | @return list of command arguments |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
395 | @rtype list of str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
396 | @exception RuntimeError raised to indicate an illegal arguments parsing |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
397 | condition |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
398 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
399 | # see http:#msdn.microsoft.com/en-us/library/a1y7w461.aspx |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
400 | result = [] |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
401 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
402 | DEFAULT = 0 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
403 | ARG = 1 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
404 | IN_DOUBLE_QUOTE = 2 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
405 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
406 | state = DEFAULT |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
407 | backslashes = 0 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
408 | buf = '' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
409 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
410 | argsLen = len(args) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
411 | for i in range(argsLen): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
412 | ch = args[i] |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
413 | if ch == '\\': |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
414 | backslashes += 1 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
415 | continue |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
416 | elif backslashes != 0: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
417 | if ch == '"': |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
418 | while backslashes >= 2: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
419 | backslashes -= 2 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
420 | buf += '\\' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
421 | if backslashes == 1: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
422 | if state == DEFAULT: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
423 | state = ARG |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
424 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
425 | buf += '"' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
426 | backslashes = 0 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
427 | continue |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
428 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
429 | # false alarm, treat passed backslashes literally... |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
430 | if state == DEFAULT: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
431 | state = ARG |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
432 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
433 | while backslashes > 0: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
434 | backslashes -= 1 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
435 | buf += '\\' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
436 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
437 | if ch in (' ', '\t'): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
438 | if state == DEFAULT: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
439 | # skip |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
440 | continue |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
441 | elif state == ARG: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
442 | state = DEFAULT |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
443 | result.append(buf) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
444 | buf = '' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
445 | continue |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
446 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
447 | if state in (DEFAULT, ARG): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
448 | if ch == '"': |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
449 | state = IN_DOUBLE_QUOTE |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
450 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
451 | state = ARG |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
452 | buf += ch |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
453 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
454 | elif state == IN_DOUBLE_QUOTE: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
455 | if ch == '"': |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
456 | if i + 1 < argsLen and args[i + 1] == '"': |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
457 | # Undocumented feature in Windows: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
458 | # Two consecutive double quotes inside a double-quoted |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
459 | # argument are interpreted as a single double quote. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
460 | buf += '"' |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
461 | i += 1 |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
462 | elif len(buf) == 0: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
463 | result.append("\"\"") |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
464 | state = DEFAULT |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
465 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
466 | state = ARG |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
467 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
468 | buf += ch |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
469 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
470 | else: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
471 | raise RuntimeError('Illegal condition') |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
472 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
473 | if len(buf) > 0 or state != DEFAULT: |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
474 | result.append(buf) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
475 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
476 | return result |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
477 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
478 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
479 | def patchArgumentStringWindows(debugClient, argStr): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
480 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
481 | Function to patch an argument string for Windows. |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
482 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
483 | @param debugClient reference to the debug client object |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
484 | @type DebugClient |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
485 | @param argStr argument string |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
486 | @type str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
487 | @return patched argument string |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
488 | @rtype str |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
489 | """ |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
490 | args = stringToArgumentsWindows(argStr) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
491 | if not args or not isPythonProgram(args[0]): |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
492 | return argStr |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
493 | |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
494 | argStr = ' '.join(patchArguments(debugClient, args)) |
eb65864ca038
Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7646
diff
changeset
|
495 | return argStr |