annotate Lib/idlelib/RemoteDebugger.py @ 79691:05c8928362ee

Merge __next__ method link fixes with 3.3.
author Ezio Melotti <ezio.melotti@gmail.com>
date Fri, 12 Oct 2012 13:46:37 +0300
parents 7dd2c1746267
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
1 """Support for remote Python debugging.
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
2
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
3 Some ASCII art to describe the structure:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
4
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
5 IN PYTHON SUBPROCESS # IN IDLE PROCESS
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
6 #
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
7 # oid='gui_adapter'
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
8 +----------+ # +------------+ +-----+
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
9 | GUIProxy |--remote#call-->| GUIAdapter |--calls-->| GUI |
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
10 +-----+--calls-->+----------+ # +------------+ +-----+
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
11 | Idb | # /
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
12 +-----+<-calls--+------------+ # +----------+<--calls-/
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
13 | IdbAdapter |<--remote#call--| IdbProxy |
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
14 +------------+ # +----------+
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
15 oid='idb_adapter' #
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
16
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
17 The purpose of the Proxy and Adapter classes is to translate certain
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
18 arguments and return values that cannot be transported through the RPC
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
19 barrier, in particular frame and traceback objects.
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
20
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
21 """
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
22
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
23 import types
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42324
diff changeset
24 from idlelib import rpc
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42324
diff changeset
25 from idlelib import Debugger
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
26
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
27 debugging = 0
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
28
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
29 idb_adap_oid = "idb_adapter"
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
30 gui_adap_oid = "gui_adapter"
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
31
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
32 #=======================================
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
33 #
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
34 # In the PYTHON subprocess:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
35
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
36 frametable = {}
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
37 dicttable = {}
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
38 codetable = {}
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
39 tracebacktable = {}
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
40
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
41 def wrap_frame(frame):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
42 fid = id(frame)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
43 frametable[fid] = frame
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
44 return fid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
45
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
46 def wrap_info(info):
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
47 "replace info[2], a traceback instance, by its ID"
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
48 if info is None:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
49 return None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
50 else:
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
51 traceback = info[2]
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
52 assert isinstance(traceback, types.TracebackType)
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
53 traceback_id = id(traceback)
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
54 tracebacktable[traceback_id] = traceback
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
55 modified_info = (info[0], info[1], traceback_id)
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
56 return modified_info
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
57
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
58 class GUIProxy:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
59
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
60 def __init__(self, conn, gui_adap_oid):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
61 self.conn = conn
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
62 self.oid = gui_adap_oid
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
63
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
64 def interaction(self, message, frame, info=None):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
65 # calls rpc.SocketIO.remotecall() via run.MyHandler instance
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
66 # pass frame and traceback object IDs instead of the objects themselves
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
67 self.conn.remotecall(self.oid, "interaction",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
68 (message, wrap_frame(frame), wrap_info(info)),
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
69 {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
70
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
71 class IdbAdapter:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
72
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
73 def __init__(self, idb):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
74 self.idb = idb
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
75
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
76 #----------called by an IdbProxy----------
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
77
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
78 def set_step(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
79 self.idb.set_step()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
80
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
81 def set_quit(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
82 self.idb.set_quit()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
83
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
84 def set_continue(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
85 self.idb.set_continue()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
86
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
87 def set_next(self, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
88 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
89 self.idb.set_next(frame)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
90
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
91 def set_return(self, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
92 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
93 self.idb.set_return(frame)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
94
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
95 def get_stack(self, fid, tbid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
96 frame = frametable[fid]
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
97 if tbid is None:
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
98 tb = None
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
99 else:
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
100 tb = tracebacktable[tbid]
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
101 stack, i = self.idb.get_stack(frame, tb)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
102 stack = [(wrap_frame(frame), k) for frame, k in stack]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
103 return stack, i
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
104
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
105 def run(self, cmd):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
106 import __main__
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
107 self.idb.run(cmd, __main__.__dict__)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
108
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
109 def set_break(self, filename, lineno):
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
110 msg = self.idb.set_break(filename, lineno)
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
111 return msg
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
112
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
113 def clear_break(self, filename, lineno):
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
114 msg = self.idb.clear_break(filename, lineno)
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
115 return msg
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
116
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
117 def clear_all_file_breaks(self, filename):
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
118 msg = self.idb.clear_all_file_breaks(filename)
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
119 return msg
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 25123
diff changeset
120
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
121 #----------called by a FrameProxy----------
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
122
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
123 def frame_attr(self, fid, name):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
124 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
125 return getattr(frame, name)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
126
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
127 def frame_globals(self, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
128 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
129 dict = frame.f_globals
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
130 did = id(dict)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
131 dicttable[did] = dict
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
132 return did
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
133
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
134 def frame_locals(self, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
135 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
136 dict = frame.f_locals
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
137 did = id(dict)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
138 dicttable[did] = dict
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
139 return did
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
140
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
141 def frame_code(self, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
142 frame = frametable[fid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
143 code = frame.f_code
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
144 cid = id(code)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
145 codetable[cid] = code
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
146 return cid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
147
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
148 #----------called by a CodeProxy----------
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
149
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
150 def code_name(self, cid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
151 code = codetable[cid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
152 return code.co_name
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
153
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
154 def code_filename(self, cid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
155 code = codetable[cid]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
156 return code.co_filename
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
157
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
158 #----------called by a DictProxy----------
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
159
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
160 def dict_keys(self, did):
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
161 raise NotImplemented("dict_keys not public or pickleable")
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
162 ## dict = dicttable[did]
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
163 ## return dict.keys()
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
164
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
165 ### Needed until dict_keys is type is finished and pickealable.
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
166 ### Will probably need to extend rpc.py:SocketIO._proxify at that time.
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
167 def dict_keys_list(self, did):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
168 dict = dicttable[did]
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 42722
diff changeset
169 return list(dict.keys())
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
170
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
171 def dict_item(self, did, key):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
172 dict = dicttable[did]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
173 value = dict[key]
44098
0889daf6d0d9 #1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents: 42999
diff changeset
174 value = repr(value) ### can't pickle module 'builtins'
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
175 return value
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
176
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
177 #----------end class IdbAdapter----------
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
178
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
179
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
180 def start_debugger(rpchandler, gui_adap_oid):
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
181 """Start the debugger and its RPC link in the Python subprocess
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
182
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
183 Start the subprocess side of the split debugger and set up that side of the
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
184 RPC link by instantiating the GUIProxy, Idb debugger, and IdbAdapter
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
185 objects and linking them together. Register the IdbAdapter with the
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
186 RPCServer to handle RPC requests from the split debugger GUI via the
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
187 IdbProxy.
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
188
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
189 """
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
190 gui_proxy = GUIProxy(rpchandler, gui_adap_oid)
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
191 idb = Debugger.Idb(gui_proxy)
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
192 idb_adap = IdbAdapter(idb)
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
193 rpchandler.register(idb_adap_oid, idb_adap)
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
194 return idb_adap_oid
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
195
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
196
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
197 #=======================================
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
198 #
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
199 # In the IDLE process:
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
200
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
201
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
202 class FrameProxy:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
203
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
204 def __init__(self, conn, fid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
205 self._conn = conn
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
206 self._fid = fid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
207 self._oid = "idb_adapter"
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
208 self._dictcache = {}
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
209
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
210 def __getattr__(self, name):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
211 if name[:1] == "_":
42722
3284307a7351 Fix raise with 2to3
Kurt B. Kaiser <kbk@shore.net>
parents: 42714
diff changeset
212 raise AttributeError(name)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
213 if name == "f_code":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
214 return self._get_f_code()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
215 if name == "f_globals":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
216 return self._get_f_globals()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
217 if name == "f_locals":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
218 return self._get_f_locals()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
219 return self._conn.remotecall(self._oid, "frame_attr",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
220 (self._fid, name), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
221
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
222 def _get_f_code(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
223 cid = self._conn.remotecall(self._oid, "frame_code", (self._fid,), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
224 return CodeProxy(self._conn, self._oid, cid)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
225
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
226 def _get_f_globals(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
227 did = self._conn.remotecall(self._oid, "frame_globals",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
228 (self._fid,), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
229 return self._get_dict_proxy(did)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
230
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
231 def _get_f_locals(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
232 did = self._conn.remotecall(self._oid, "frame_locals",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
233 (self._fid,), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
234 return self._get_dict_proxy(did)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
235
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
236 def _get_dict_proxy(self, did):
39634
d91585b2cdc1 Remove has_key() references from idlelib. IDLE still doesn't run due
Guido van Rossum <guido@python.org>
parents: 31515
diff changeset
237 if did in self._dictcache:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
238 return self._dictcache[did]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
239 dp = DictProxy(self._conn, self._oid, did)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
240 self._dictcache[did] = dp
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
241 return dp
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
242
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
243
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
244 class CodeProxy:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
245
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
246 def __init__(self, conn, oid, cid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
247 self._conn = conn
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
248 self._oid = oid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
249 self._cid = cid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
250
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
251 def __getattr__(self, name):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
252 if name == "co_name":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
253 return self._conn.remotecall(self._oid, "code_name",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
254 (self._cid,), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
255 if name == "co_filename":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
256 return self._conn.remotecall(self._oid, "code_filename",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
257 (self._cid,), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
258
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
259
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
260 class DictProxy:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
261
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
262 def __init__(self, conn, oid, did):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
263 self._conn = conn
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
264 self._oid = oid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
265 self._did = did
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
266
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
267 ## def keys(self):
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
268 ## return self._conn.remotecall(self._oid, "dict_keys", (self._did,), {})
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
269
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
270 # 'temporary' until dict_keys is a pickleable built-in type
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
271 def keys(self):
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
272 return self._conn.remotecall(self._oid,
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
273 "dict_keys_list", (self._did,), {})
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
274
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
275 def __getitem__(self, key):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
276 return self._conn.remotecall(self._oid, "dict_item",
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
277 (self._did, key), {})
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
278
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
279 def __getattr__(self, name):
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
280 ##print("*** Failed DictProxy.__getattr__:", name)
42722
3284307a7351 Fix raise with 2to3
Kurt B. Kaiser <kbk@shore.net>
parents: 42714
diff changeset
281 raise AttributeError(name)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
282
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
283
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
284 class GUIAdapter:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
285
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
286 def __init__(self, conn, gui):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
287 self.conn = conn
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
288 self.gui = gui
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
289
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
290 def interaction(self, message, fid, modified_info):
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
291 ##print("*** Interaction: (%s, %s, %s)" % (message, fid, modified_info))
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
292 frame = FrameProxy(self.conn, fid)
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
293 self.gui.interaction(message, frame, modified_info)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
294
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
295
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
296 class IdbProxy:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
297
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
298 def __init__(self, conn, shell, oid):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
299 self.oid = oid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
300 self.conn = conn
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
301 self.shell = shell
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
302
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
303 def call(self, methodname, *args, **kwargs):
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
304 ##print("*** IdbProxy.call %s %s %s" % (methodname, args, kwargs))
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
305 value = self.conn.remotecall(self.oid, methodname, args, kwargs)
42999
dc0f0ffd4257 1. Debugger was failing to start due to DictProxy limitations.
Kurt B. Kaiser <kbk@shore.net>
parents: 42725
diff changeset
306 ##print("*** IdbProxy.call %s returns %r" % (methodname, value))
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
307 return value
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
308
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
309 def run(self, cmd, locals):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
310 # Ignores locals on purpose!
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 27379
diff changeset
311 seq = self.conn.asyncqueue(self.oid, "run", (cmd,), {})
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
312 self.shell.interp.active_seq = seq
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
313
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
314 def get_stack(self, frame, tbid):
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
315 # passing frame and traceback IDs, not the objects themselves
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
316 stack, i = self.call("get_stack", frame._fid, tbid)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
317 stack = [(FrameProxy(self.conn, fid), k) for fid, k in stack]
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
318 return stack, i
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
319
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
320 def set_continue(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
321 self.call("set_continue")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
322
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
323 def set_step(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
324 self.call("set_step")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
325
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
326 def set_next(self, frame):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
327 self.call("set_next", frame._fid)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
328
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
329 def set_return(self, frame):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
330 self.call("set_return", frame._fid)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
331
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
332 def set_quit(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
333 self.call("set_quit")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
334
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
335 def set_break(self, filename, lineno):
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
336 msg = self.call("set_break", filename, lineno)
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
337 return msg
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
338
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
339 def clear_break(self, filename, lineno):
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
340 msg = self.call("clear_break", filename, lineno)
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
341 return msg
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
342
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
343 def clear_all_file_breaks(self, filename):
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
344 msg = self.call("clear_all_file_breaks", filename)
24105
8ceee6630322 Debugger Exception Info and GUI Stack Exception Traceback: finish
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
345 return msg
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
346
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
347 def start_remote_debugger(rpcclt, pyshell):
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
348 """Start the subprocess debugger, initialize the debugger GUI and RPC link
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
349
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
350 Request the RPCServer start the Python subprocess debugger and link. Set
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
351 up the Idle side of the split debugger by instantiating the IdbProxy,
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
352 debugger GUI, and debugger GUIAdapter objects and linking them together.
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
353
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
354 Register the GUIAdapter with the RPCClient to handle debugger GUI
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
355 interaction requests coming from the subprocess debugger via the GUIProxy.
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
356
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
357 The IdbAdapter will pass execution and environment requests coming from the
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
358 Idle debugger GUI to the subprocess debugger via the IdbProxy.
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
359
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
360 """
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
361 global idb_adap_oid
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
362
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
363 idb_adap_oid = rpcclt.remotecall("exec", "start_the_debugger",\
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
364 (gui_adap_oid,), {})
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
365 idb_proxy = IdbProxy(rpcclt, pyshell, idb_adap_oid)
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
366 gui = Debugger.Debugger(pyshell, idb_proxy)
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
367 gui_adap = GUIAdapter(rpcclt, gui)
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
368 rpcclt.register(gui_adap_oid, gui_adap)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
369 return gui
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
370
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
371 def close_remote_debugger(rpcclt):
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
372 """Shut down subprocess debugger and Idle side of debugger RPC link
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
373
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
374 Request that the RPCServer shut down the subprocess debugger and link.
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
375 Unregister the GUIAdapter, which will cause a GC on the Idle process
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
376 debugger and RPC link objects. (The second reference to the debugger GUI
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
377 is deleted in PyShell.close_remote_debugger().)
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
378
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 25123
diff changeset
379 """
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
380 close_subprocess_debugger(rpcclt)
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
381 rpcclt.unregister(gui_adap_oid)
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
382
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
383 def close_subprocess_debugger(rpcclt):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
384 rpcclt.remotecall("exec", "stop_the_debugger", (idb_adap_oid,), {})
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
385
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
386 def restart_subprocess_debugger(rpcclt):
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
387 idb_adap_oid_ret = rpcclt.remotecall("exec", "start_the_debugger",\
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
388 (gui_adap_oid,), {})
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24105
diff changeset
389 assert idb_adap_oid_ret == idb_adap_oid, 'Idb restarted with different oid'