Mon, 21 Dec 2020 13:36:24 +0100
Debugger: removed the tracer TODO markers. I am not going to implement it.
7563
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2020 Detlev Offenbach <detlev@die-offenbachs.de> |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a function to patch multiprocessing.Process to support |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | debugging of the process. |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import sys |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import traceback |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | _debugClient = None |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | _originalProcess = None |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | _originalBootstrap = None |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | def patchMultiprocessing(module, debugClient): |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | Function to patch the multiprocessing module. |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | @param module reference to the imported module to be patched |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | @type module |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | @param debugClient reference to the debug client object |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | @type DebugClient |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | """ # __IGNORE_WARNING_D234__ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | global _debugClient, _originalProcess, _originalBootstrap |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | _debugClient = debugClient |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
7894
4370a8b30648
Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7893
diff
changeset
|
32 | _originalProcess = module.process.BaseProcess |
7563
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | _originalBootstrap = _originalProcess._bootstrap |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | class ProcessWrapper(_originalProcess): |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | Wrapper class for multiprocessing.Process. |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | def _bootstrap(self, *args, **kwargs): |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Wrapper around _bootstrap to start debugger. |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param args function arguments |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @type list |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | @param kwargs keyword only arguments |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @type dict |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | @return exit code of the process |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | @rtype int |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | """ |
7901
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
50 | _debugging = False |
7563
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | if ( |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | _debugClient.debugging and |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | _debugClient.multiprocessSupport |
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | ): |
7901
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
55 | scriptName = sys.argv[0] |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
56 | if not _debugClient.skipMultiProcessDebugging(scriptName): |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
57 | _debugging = True |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
58 | try: |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
59 | (wd, host, port, exceptions, tracePython, redirect, |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
60 | noencoding) = _debugClient.startOptions[:7] |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
61 | _debugClient.startDebugger( |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
62 | sys.argv[0], host=host, port=port, |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
63 | exceptions=exceptions, tracePython=tracePython, |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
64 | redirect=redirect, passive=False, |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
65 | multiprocessSupport=True |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
66 | ) |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
67 | except Exception: |
7903
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
68 | print( |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
69 | # __IGNORE_WARNING_M801__ |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
70 | "Exception during multiprocessing bootstrap init:" |
827d89937c30
Fixed a few issues with the new multi process debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7901
diff
changeset
|
71 | ) |
7901
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
72 | traceback.print_exc(file=sys.stdout) |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
73 | sys.stdout.flush() |
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
74 | raise |
7563
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
7893
29d2c2e5b948
MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7882
diff
changeset
|
76 | exitcode = _originalBootstrap(self, *args, **kwargs) |
29d2c2e5b948
MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7882
diff
changeset
|
77 | |
7901
6ff7ccf0cb50
Debugger: refined the handling of not to be debugged scripts for multiprocess debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7894
diff
changeset
|
78 | if _debugging: |
7893
29d2c2e5b948
MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7882
diff
changeset
|
79 | _debugClient.progTerminated(exitcode, "process finished") |
29d2c2e5b948
MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7882
diff
changeset
|
80 | |
29d2c2e5b948
MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7882
diff
changeset
|
81 | return exitcode |
7563
b0d6b63f2843
Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | |
7894
4370a8b30648
Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7893
diff
changeset
|
83 | _originalProcess._bootstrap = ProcessWrapper._bootstrap |