eric6/DebugClients/Python/DebugUtilities.py

Sun, 16 Feb 2020 12:42:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Feb 2020 12:42:12 +0100
branch
multi_processing
changeset 7420
0d596bb4a60d
parent 7419
9c1163735448
child 7421
4a9900aef04e
permissions
-rw-r--r--

Added multi process support for programs with a shebang line.

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
7360
9190402e4505 Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
3 # Copyright (c) 2015 - 2020 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
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @keyparam formatarg argument formatting function
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
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @keyparam formatvarargs variable arguments formatting function
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
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @keyparam formatvarkw keyword arguments formatting function
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
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @keyparam formatvalue value formating functtion
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:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
191 with open(program) as f:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
192 for line in f:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
193 line = line.strip()
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
194 if line:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
195 for name in PYTHON_NAMES:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
196 if line.startswith('#!/usr/bin/env {0}'.format(name)):
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
197 return True
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
198 return False
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
199 except UnicodeDecodeError:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
200 return False
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
201 except Exception:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
202 traceback.print_exc()
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
203 return False
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
204
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
205
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
206 def isPythonProgram(program):
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
207 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
208 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
209 program.
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
210
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
211 @param program program to be checked
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
212 @type str
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
213 @return flag indicating a Python interpreter or program
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
214 @rtype bool
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
215 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
216 prog = os.path.basename(program).lower()
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
217 for pyname in PYTHON_NAMES:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
218 if pyname in prog:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
219 return True
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
220
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
221 return (
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
222 not isWindowsPlatform() and
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
223 isExecutable(program) and
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
224 startsWithShebang(program)
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
225 )
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
226
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
227
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
228 def patchArguments(debugClient, arguments, noRedirect=False):
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
229 """
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
230 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
231 execute it in our debugger.
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
232
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
233 @param debugClient reference to the debug client object
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
234 @type DebugClient
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
235 @param arguments list of program arguments
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
236 @type list of str
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
237 @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
238 @type bool
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
239 @return modified argument list
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
240 @rtype list of str
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
241 """
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
242 args = arguments[:] # create a copy of the arguments list
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
243
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
244 # 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
245 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
246 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
247 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
248 break
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
249 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
250 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
251 # 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
252 args.insert(0, sys.executable)
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
253
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
254 # check for -c or -m invocation => debugging not supported yet
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
255 if "-c" in args:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
256 cm_position = args.index("-c")
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
257 elif "-m" in args:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
258 cm_position = args.index("-m")
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
259 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
260 cm_position = 0
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
261 if cm_position > 0:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
262 # check if it belongs to the interpreter or program
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
263 for pos in range(1, len(args)):
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
264 if not args[pos].startswith("-"):
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
265 # first argument not starting with '-' is the program
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
266 found = True
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
267 break
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
268 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
269 found = False
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
270 if found and cm_position < pos:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
271 # it belongs to the interpreter
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
272 return arguments
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
273
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
274 # 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
275 # 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
276 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
277 interpreterArgs = []
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
278 while args:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
279 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
280 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
281 # 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
282 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
283 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
284 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
285 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
286 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
287 break
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
288 print(interpreter, interpreterArgs, args)
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
289
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
290 (wd, host, port, exceptions, tracePython, redirect, noencoding
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
291 ) = debugClient.startOptions[:7]
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
292
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
293 modifiedArguments = [interpreter]
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
294 modifiedArguments.extend(interpreterArgs)
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
295 modifiedArguments.extend([
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
296 os.path.join(os.path.dirname(__file__), "DebugClient.py"),
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
297 "-h", host,
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
298 "-p", str(port),
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
299 "--no-passive",
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
300 ])
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
301
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
302 if wd:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
303 modifiedArguments.extend(["-w", wd])
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
304 if not exceptions:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
305 modifiedArguments.append("-e")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
306 if tracePython:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
307 modifiedArguments.append("-t")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
308 if noRedirect or not redirect:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
309 modifiedArguments.append("-n")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
310 if noencoding:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
311 modifiedArguments.append("--no-encoding")
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
312 if debugClient.multiprocessSupport:
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
313 modifiedArguments.append("--multiprocess")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
314 modifiedArguments.append("--")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
315 # end the arguments for DebugClient
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
316
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
317 # 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
318 modifiedArguments.extend(args)
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
319
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
320 return modifiedArguments
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
321
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4455
diff changeset
322 #
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4455
diff changeset
323 # eflag: noqa = M702

eric ide

mercurial