Current Path: > > > > lib64 > python2.7 > idlelib
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
Icons | Directory | - | - | |
idle_test | Directory | - | - | |
AutoComplete.py | File | 8964 bytes | April 10 2024 04:58:35. | |
AutoComplete.pyc | File | 8012 bytes | April 10 2024 04:58:46. | |
AutoComplete.pyo | File | 8012 bytes | April 10 2024 04:58:46. | |
AutoCompleteWindow.py | File | 17318 bytes | April 10 2024 04:58:35. | |
AutoCompleteWindow.pyc | File | 12480 bytes | April 10 2024 04:58:46. | |
AutoCompleteWindow.pyo | File | 12421 bytes | April 10 2024 04:58:43. | |
AutoExpand.py | File | 3395 bytes | April 10 2024 04:58:35. | |
AutoExpand.pyc | File | 3502 bytes | April 10 2024 04:58:46. | |
AutoExpand.pyo | File | 3502 bytes | April 10 2024 04:58:46. | |
Bindings.py | File | 2976 bytes | April 10 2024 04:58:35. | |
Bindings.pyc | File | 4695 bytes | April 10 2024 04:58:46. | |
Bindings.pyo | File | 4695 bytes | April 10 2024 04:58:46. | |
CREDITS.txt | File | 1866 bytes | April 10 2024 04:58:35. | |
CallTipWindow.py | File | 6065 bytes | April 10 2024 04:58:35. | |
CallTipWindow.pyc | File | 6136 bytes | April 10 2024 04:58:46. | |
CallTipWindow.pyo | File | 6136 bytes | April 10 2024 04:58:46. | |
CallTips.py | File | 7740 bytes | April 10 2024 04:58:35. | |
CallTips.pyc | File | 8133 bytes | April 10 2024 04:58:46. | |
CallTips.pyo | File | 8133 bytes | April 10 2024 04:58:46. | |
ChangeLog | File | 56393 bytes | April 10 2024 04:58:35. | |
ClassBrowser.py | File | 6999 bytes | April 10 2024 04:58:35. | |
ClassBrowser.pyc | File | 9500 bytes | April 10 2024 04:58:46. | |
ClassBrowser.pyo | File | 9500 bytes | April 10 2024 04:58:46. | |
CodeContext.py | File | 8342 bytes | April 10 2024 04:58:35. | |
CodeContext.pyc | File | 6658 bytes | April 10 2024 04:58:46. | |
CodeContext.pyo | File | 6614 bytes | April 10 2024 04:58:43. | |
ColorDelegator.py | File | 9762 bytes | April 10 2024 04:58:35. | |
ColorDelegator.pyc | File | 8898 bytes | April 10 2024 04:58:46. | |
ColorDelegator.pyo | File | 8898 bytes | April 10 2024 04:58:46. | |
Debugger.py | File | 18236 bytes | April 10 2024 04:58:35. | |
Debugger.pyc | File | 17546 bytes | April 10 2024 04:58:46. | |
Debugger.pyo | File | 17546 bytes | April 10 2024 04:58:46. | |
Delegator.py | File | 665 bytes | April 10 2024 04:58:35. | |
Delegator.pyc | File | 1268 bytes | April 10 2024 04:58:46. | |
Delegator.pyo | File | 1268 bytes | April 10 2024 04:58:46. | |
EditorWindow.py | File | 65498 bytes | April 10 2024 04:58:35. | |
EditorWindow.pyc | File | 56858 bytes | April 10 2024 04:58:46. | |
EditorWindow.pyo | File | 56756 bytes | April 10 2024 04:58:43. | |
FileList.py | File | 3718 bytes | April 10 2024 04:58:35. | |
FileList.pyc | File | 4025 bytes | April 10 2024 04:58:46. | |
FileList.pyo | File | 3992 bytes | April 10 2024 04:58:43. | |
FormatParagraph.py | File | 7287 bytes | April 10 2024 04:58:35. | |
FormatParagraph.pyc | File | 7142 bytes | April 10 2024 04:58:46. | |
FormatParagraph.pyo | File | 7142 bytes | April 10 2024 04:58:46. | |
GrepDialog.py | File | 5145 bytes | April 10 2024 04:58:35. | |
GrepDialog.pyc | File | 6425 bytes | April 10 2024 04:58:46. | |
GrepDialog.pyo | File | 6425 bytes | April 10 2024 04:58:46. | |
HISTORY.txt | File | 10317 bytes | April 10 2024 04:58:35. | |
HyperParser.py | File | 10497 bytes | April 10 2024 04:58:35. | |
HyperParser.pyc | File | 6673 bytes | April 10 2024 04:58:46. | |
HyperParser.pyo | File | 6673 bytes | April 10 2024 04:58:46. | |
IOBinding.py | File | 21911 bytes | April 10 2024 04:58:35. | |
IOBinding.pyc | File | 18535 bytes | April 10 2024 04:58:46. | |
IOBinding.pyo | File | 18535 bytes | April 10 2024 04:58:46. | |
IdleHistory.py | File | 4052 bytes | April 10 2024 04:58:35. | |
IdleHistory.pyc | File | 4060 bytes | April 10 2024 04:58:46. | |
IdleHistory.pyo | File | 4060 bytes | April 10 2024 04:58:46. | |
MultiCall.py | File | 17701 bytes | April 10 2024 04:58:35. | |
MultiCall.pyc | File | 16351 bytes | April 10 2024 04:58:46. | |
MultiCall.pyo | File | 16277 bytes | April 10 2024 04:58:43. | |
MultiStatusBar.py | File | 1348 bytes | April 10 2024 04:58:35. | |
MultiStatusBar.pyc | File | 2279 bytes | April 10 2024 04:58:46. | |
MultiStatusBar.pyo | File | 2279 bytes | April 10 2024 04:58:46. | |
NEWS.txt | File | 47247 bytes | April 10 2024 04:58:35. | |
ObjectBrowser.py | File | 4376 bytes | April 10 2024 04:58:35. | |
ObjectBrowser.pyc | File | 7067 bytes | April 10 2024 04:58:46. | |
ObjectBrowser.pyo | File | 7067 bytes | April 10 2024 04:58:46. | |
OutputWindow.py | File | 4576 bytes | April 10 2024 04:58:35. | |
OutputWindow.pyc | File | 5232 bytes | April 10 2024 04:58:46. | |
OutputWindow.pyo | File | 5232 bytes | April 10 2024 04:58:46. | |
ParenMatch.py | File | 6714 bytes | April 10 2024 04:58:35. | |
ParenMatch.pyc | File | 7129 bytes | April 10 2024 04:58:46. | |
ParenMatch.pyo | File | 7129 bytes | April 10 2024 04:58:46. | |
PathBrowser.py | File | 3009 bytes | April 10 2024 04:58:35. | |
PathBrowser.pyc | File | 4486 bytes | April 10 2024 04:58:46. | |
PathBrowser.pyo | File | 4486 bytes | April 10 2024 04:58:46. | |
Percolator.py | File | 3222 bytes | April 10 2024 04:58:35. | |
Percolator.pyc | File | 4608 bytes | April 10 2024 04:58:46. | |
Percolator.pyo | File | 4424 bytes | April 10 2024 04:58:43. | |
PyParse.py | File | 19510 bytes | April 10 2024 04:58:35. | |
PyParse.pyc | File | 10005 bytes | April 10 2024 04:58:46. | |
PyParse.pyo | File | 9567 bytes | April 10 2024 04:58:43. | |
PyShell.py | File | 58862 bytes | April 10 2024 04:58:35. | |
PyShell.pyc | File | 52826 bytes | April 10 2024 04:58:46. | |
PyShell.pyo | File | 52724 bytes | April 10 2024 04:58:43. | |
README.txt | File | 7890 bytes | April 10 2024 04:58:35. | |
RemoteDebugger.py | File | 11632 bytes | April 10 2024 04:58:35. | |
RemoteDebugger.pyc | File | 16325 bytes | April 10 2024 04:58:46. | |
RemoteDebugger.pyo | File | 16171 bytes | April 10 2024 04:58:43. | |
RemoteObjectBrowser.py | File | 942 bytes | April 10 2024 04:58:35. | |
RemoteObjectBrowser.pyc | File | 2150 bytes | April 10 2024 04:58:46. | |
RemoteObjectBrowser.pyo | File | 2150 bytes | April 10 2024 04:58:46. | |
ReplaceDialog.py | File | 6639 bytes | April 10 2024 04:58:35. | |
ReplaceDialog.pyc | File | 7756 bytes | April 10 2024 04:58:46. | |
ReplaceDialog.pyo | File | 7756 bytes | April 10 2024 04:58:46. | |
RstripExtension.py | File | 1050 bytes | April 10 2024 04:58:35. | |
RstripExtension.pyc | File | 1613 bytes | April 10 2024 04:58:46. | |
RstripExtension.pyo | File | 1613 bytes | April 10 2024 04:58:46. | |
ScriptBinding.py | File | 8459 bytes | April 10 2024 04:58:35. | |
ScriptBinding.pyc | File | 8201 bytes | April 10 2024 04:58:46. | |
ScriptBinding.pyo | File | 8201 bytes | April 10 2024 04:58:46. | |
ScrolledList.py | File | 4373 bytes | April 10 2024 04:58:35. | |
ScrolledList.pyc | File | 6482 bytes | April 10 2024 04:58:46. | |
ScrolledList.pyo | File | 6482 bytes | April 10 2024 04:58:46. | |
SearchDialog.py | File | 2630 bytes | April 10 2024 04:58:35. | |
SearchDialog.pyc | File | 3983 bytes | April 10 2024 04:58:46. | |
SearchDialog.pyo | File | 3983 bytes | April 10 2024 04:58:46. | |
SearchDialogBase.py | File | 7094 bytes | April 10 2024 04:58:35. | |
SearchDialogBase.pyc | File | 8462 bytes | April 10 2024 04:58:46. | |
SearchDialogBase.pyo | File | 8462 bytes | April 10 2024 04:58:46. | |
SearchEngine.py | File | 7463 bytes | April 10 2024 04:58:35. | |
SearchEngine.pyc | File | 8302 bytes | April 10 2024 04:58:46. | |
SearchEngine.pyo | File | 8302 bytes | April 10 2024 04:58:46. | |
StackViewer.py | File | 4431 bytes | April 10 2024 04:58:35. | |
StackViewer.pyc | File | 6404 bytes | April 10 2024 04:58:46. | |
StackViewer.pyo | File | 6404 bytes | April 10 2024 04:58:46. | |
TODO.txt | File | 8478 bytes | April 10 2024 04:58:35. | |
ToolTip.py | File | 3173 bytes | April 10 2024 04:58:35. | |
ToolTip.pyc | File | 4669 bytes | April 10 2024 04:58:46. | |
ToolTip.pyo | File | 4669 bytes | April 10 2024 04:58:46. | |
TreeWidget.py | File | 15037 bytes | April 10 2024 04:58:35. | |
TreeWidget.pyc | File | 17694 bytes | April 10 2024 04:58:46. | |
TreeWidget.pyo | File | 17694 bytes | April 10 2024 04:58:46. | |
UndoDelegator.py | File | 10787 bytes | April 10 2024 04:58:35. | |
UndoDelegator.pyc | File | 13555 bytes | April 10 2024 04:58:46. | |
UndoDelegator.pyo | File | 13555 bytes | April 10 2024 04:58:46. | |
WidgetRedirector.py | File | 6906 bytes | April 10 2024 04:58:35. | |
WidgetRedirector.pyc | File | 7769 bytes | April 10 2024 04:58:46. | |
WidgetRedirector.pyo | File | 7769 bytes | April 10 2024 04:58:46. | |
WindowList.py | File | 2473 bytes | April 10 2024 04:58:35. | |
WindowList.pyc | File | 3636 bytes | April 10 2024 04:58:46. | |
WindowList.pyo | File | 3636 bytes | April 10 2024 04:58:46. | |
ZoomHeight.py | File | 1300 bytes | April 10 2024 04:58:35. | |
ZoomHeight.pyc | File | 1646 bytes | April 10 2024 04:58:46. | |
ZoomHeight.pyo | File | 1646 bytes | April 10 2024 04:58:46. | |
__init__.py | File | 288 bytes | April 10 2024 04:58:35. | |
__init__.pyc | File | 431 bytes | April 10 2024 04:58:46. | |
__init__.pyo | File | 431 bytes | April 10 2024 04:58:46. | |
aboutDialog.py | File | 7014 bytes | April 10 2024 04:58:35. | |
aboutDialog.pyc | File | 6848 bytes | April 10 2024 04:58:46. | |
aboutDialog.pyo | File | 6848 bytes | April 10 2024 04:58:46. | |
config-extensions.def | File | 2965 bytes | April 10 2024 04:58:35. | |
config-highlight.def | File | 2515 bytes | April 10 2024 04:58:35. | |
config-keys.def | File | 7777 bytes | April 10 2024 04:58:35. | |
config-main.def | File | 2561 bytes | April 10 2024 04:58:35. | |
configDialog.py | File | 65958 bytes | April 10 2024 04:58:35. | |
configDialog.pyc | File | 53291 bytes | April 10 2024 04:58:46. | |
configDialog.pyo | File | 53291 bytes | April 10 2024 04:58:46. | |
configHandler.py | File | 32485 bytes | April 10 2024 04:58:35. | |
configHandler.pyc | File | 29361 bytes | April 10 2024 04:58:46. | |
configHandler.pyo | File | 29361 bytes | April 10 2024 04:58:46. | |
configHelpSourceEdit.py | File | 6686 bytes | April 10 2024 04:58:35. | |
configHelpSourceEdit.pyc | File | 6595 bytes | April 10 2024 04:58:46. | |
configHelpSourceEdit.pyo | File | 6595 bytes | April 10 2024 04:58:46. | |
configSectionNameDialog.py | File | 4040 bytes | April 10 2024 04:58:35. | |
configSectionNameDialog.pyc | File | 4419 bytes | April 10 2024 04:58:46. | |
configSectionNameDialog.pyo | File | 4419 bytes | April 10 2024 04:58:46. | |
dynOptionMenuWidget.py | File | 1984 bytes | April 10 2024 04:58:35. | |
dynOptionMenuWidget.pyc | File | 2790 bytes | April 10 2024 04:58:46. | |
dynOptionMenuWidget.pyo | File | 2790 bytes | April 10 2024 04:58:46. | |
extend.txt | File | 3642 bytes | April 10 2024 04:58:35. | |
help.html | File | 42414 bytes | April 10 2024 04:58:35. | |
help.py | File | 11035 bytes | April 10 2024 04:58:35. | |
help.pyc | File | 12270 bytes | April 10 2024 04:58:46. | |
help.pyo | File | 12270 bytes | April 10 2024 04:58:46. | |
help.txt | File | 12144 bytes | April 10 2024 04:58:35. | |
idle.py | File | 453 bytes | April 10 2024 04:58:35. | |
idle.pyc | File | 410 bytes | April 10 2024 04:58:46. | |
idle.pyo | File | 410 bytes | April 10 2024 04:58:46. | |
idle.pyw | File | 563 bytes | April 10 2024 04:58:35. | |
idlever.py | File | 415 bytes | April 10 2024 04:58:35. | |
idlever.pyc | File | 578 bytes | April 10 2024 04:58:46. | |
idlever.pyo | File | 578 bytes | April 10 2024 04:58:46. | |
keybindingDialog.py | File | 12468 bytes | April 10 2024 04:58:35. | |
keybindingDialog.pyc | File | 12173 bytes | April 10 2024 04:58:46. | |
keybindingDialog.pyo | File | 12173 bytes | April 10 2024 04:58:46. | |
macosxSupport.py | File | 8435 bytes | April 10 2024 04:58:35. | |
macosxSupport.pyc | File | 8351 bytes | April 10 2024 04:58:46. | |
macosxSupport.pyo | File | 8213 bytes | April 10 2024 04:58:43. | |
rpc.py | File | 20150 bytes | April 10 2024 04:58:35. | |
rpc.pyc | File | 21728 bytes | April 10 2024 04:58:46. | |
rpc.pyo | File | 21622 bytes | April 10 2024 04:58:43. | |
run.py | File | 12917 bytes | April 10 2024 04:58:35. | |
run.pyc | File | 13419 bytes | April 10 2024 04:58:46. | |
run.pyo | File | 13361 bytes | April 10 2024 04:58:43. | |
tabbedpages.py | File | 18439 bytes | April 10 2024 04:58:35. | |
tabbedpages.pyc | File | 18561 bytes | April 10 2024 04:58:46. | |
tabbedpages.pyo | File | 18561 bytes | April 10 2024 04:58:46. | |
textView.py | File | 3520 bytes | April 10 2024 04:58:35. | |
textView.pyc | File | 4025 bytes | April 10 2024 04:58:46. | |
textView.pyo | File | 4025 bytes | April 10 2024 04:58:46. |
"""Support for remote Python debugging. Some ASCII art to describe the structure: IN PYTHON SUBPROCESS # IN IDLE PROCESS # # oid='gui_adapter' +----------+ # +------------+ +-----+ | GUIProxy |--remote#call-->| GUIAdapter |--calls-->| GUI | +-----+--calls-->+----------+ # +------------+ +-----+ | Idb | # / +-----+<-calls--+------------+ # +----------+<--calls-/ | IdbAdapter |<--remote#call--| IdbProxy | +------------+ # +----------+ oid='idb_adapter' # The purpose of the Proxy and Adapter classes is to translate certain arguments and return values that cannot be transported through the RPC barrier, in particular frame and traceback objects. """ import types from idlelib import Debugger debugging = 0 idb_adap_oid = "idb_adapter" gui_adap_oid = "gui_adapter" #======================================= # # In the PYTHON subprocess: frametable = {} dicttable = {} codetable = {} tracebacktable = {} def wrap_frame(frame): fid = id(frame) frametable[fid] = frame return fid def wrap_info(info): "replace info[2], a traceback instance, by its ID" if info is None: return None else: traceback = info[2] assert isinstance(traceback, types.TracebackType) traceback_id = id(traceback) tracebacktable[traceback_id] = traceback modified_info = (info[0], info[1], traceback_id) return modified_info class GUIProxy: def __init__(self, conn, gui_adap_oid): self.conn = conn self.oid = gui_adap_oid def interaction(self, message, frame, info=None): # calls rpc.SocketIO.remotecall() via run.MyHandler instance # pass frame and traceback object IDs instead of the objects themselves self.conn.remotecall(self.oid, "interaction", (message, wrap_frame(frame), wrap_info(info)), {}) class IdbAdapter: def __init__(self, idb): self.idb = idb #----------called by an IdbProxy---------- def set_step(self): self.idb.set_step() def set_quit(self): self.idb.set_quit() def set_continue(self): self.idb.set_continue() def set_next(self, fid): frame = frametable[fid] self.idb.set_next(frame) def set_return(self, fid): frame = frametable[fid] self.idb.set_return(frame) def get_stack(self, fid, tbid): ##print >>sys.__stderr__, "get_stack(%r, %r)" % (fid, tbid) frame = frametable[fid] if tbid is None: tb = None else: tb = tracebacktable[tbid] stack, i = self.idb.get_stack(frame, tb) ##print >>sys.__stderr__, "get_stack() ->", stack stack = [(wrap_frame(frame2), k) for frame2, k in stack] ##print >>sys.__stderr__, "get_stack() ->", stack return stack, i def run(self, cmd): import __main__ self.idb.run(cmd, __main__.__dict__) def set_break(self, filename, lineno): msg = self.idb.set_break(filename, lineno) return msg def clear_break(self, filename, lineno): msg = self.idb.clear_break(filename, lineno) return msg def clear_all_file_breaks(self, filename): msg = self.idb.clear_all_file_breaks(filename) return msg #----------called by a FrameProxy---------- def frame_attr(self, fid, name): frame = frametable[fid] return getattr(frame, name) def frame_globals(self, fid): frame = frametable[fid] dict = frame.f_globals did = id(dict) dicttable[did] = dict return did def frame_locals(self, fid): frame = frametable[fid] dict = frame.f_locals did = id(dict) dicttable[did] = dict return did def frame_code(self, fid): frame = frametable[fid] code = frame.f_code cid = id(code) codetable[cid] = code return cid #----------called by a CodeProxy---------- def code_name(self, cid): code = codetable[cid] return code.co_name def code_filename(self, cid): code = codetable[cid] return code.co_filename #----------called by a DictProxy---------- def dict_keys(self, did): dict = dicttable[did] return dict.keys() def dict_item(self, did, key): dict = dicttable[did] value = dict[key] value = repr(value) return value #----------end class IdbAdapter---------- def start_debugger(rpchandler, gui_adap_oid): """Start the debugger and its RPC link in the Python subprocess Start the subprocess side of the split debugger and set up that side of the RPC link by instantiating the GUIProxy, Idb debugger, and IdbAdapter objects and linking them together. Register the IdbAdapter with the RPCServer to handle RPC requests from the split debugger GUI via the IdbProxy. """ gui_proxy = GUIProxy(rpchandler, gui_adap_oid) idb = Debugger.Idb(gui_proxy) idb_adap = IdbAdapter(idb) rpchandler.register(idb_adap_oid, idb_adap) return idb_adap_oid #======================================= # # In the IDLE process: class FrameProxy: def __init__(self, conn, fid): self._conn = conn self._fid = fid self._oid = "idb_adapter" self._dictcache = {} def __getattr__(self, name): if name[:1] == "_": raise AttributeError, name if name == "f_code": return self._get_f_code() if name == "f_globals": return self._get_f_globals() if name == "f_locals": return self._get_f_locals() return self._conn.remotecall(self._oid, "frame_attr", (self._fid, name), {}) def _get_f_code(self): cid = self._conn.remotecall(self._oid, "frame_code", (self._fid,), {}) return CodeProxy(self._conn, self._oid, cid) def _get_f_globals(self): did = self._conn.remotecall(self._oid, "frame_globals", (self._fid,), {}) return self._get_dict_proxy(did) def _get_f_locals(self): did = self._conn.remotecall(self._oid, "frame_locals", (self._fid,), {}) return self._get_dict_proxy(did) def _get_dict_proxy(self, did): if did in self._dictcache: return self._dictcache[did] dp = DictProxy(self._conn, self._oid, did) self._dictcache[did] = dp return dp class CodeProxy: def __init__(self, conn, oid, cid): self._conn = conn self._oid = oid self._cid = cid def __getattr__(self, name): if name == "co_name": return self._conn.remotecall(self._oid, "code_name", (self._cid,), {}) if name == "co_filename": return self._conn.remotecall(self._oid, "code_filename", (self._cid,), {}) class DictProxy: def __init__(self, conn, oid, did): self._conn = conn self._oid = oid self._did = did def keys(self): return self._conn.remotecall(self._oid, "dict_keys", (self._did,), {}) def __getitem__(self, key): return self._conn.remotecall(self._oid, "dict_item", (self._did, key), {}) def __getattr__(self, name): ##print >>sys.__stderr__, "failed DictProxy.__getattr__:", name raise AttributeError, name class GUIAdapter: def __init__(self, conn, gui): self.conn = conn self.gui = gui def interaction(self, message, fid, modified_info): ##print "interaction: (%s, %s, %s)" % (message, fid, modified_info) frame = FrameProxy(self.conn, fid) self.gui.interaction(message, frame, modified_info) class IdbProxy: def __init__(self, conn, shell, oid): self.oid = oid self.conn = conn self.shell = shell def call(self, methodname, *args, **kwargs): ##print "**IdbProxy.call %s %s %s" % (methodname, args, kwargs) value = self.conn.remotecall(self.oid, methodname, args, kwargs) ##print "**IdbProxy.call %s returns %r" % (methodname, value) return value def run(self, cmd, locals): # Ignores locals on purpose! seq = self.conn.asyncqueue(self.oid, "run", (cmd,), {}) self.shell.interp.active_seq = seq def get_stack(self, frame, tbid): # passing frame and traceback IDs, not the objects themselves stack, i = self.call("get_stack", frame._fid, tbid) stack = [(FrameProxy(self.conn, fid), k) for fid, k in stack] return stack, i def set_continue(self): self.call("set_continue") def set_step(self): self.call("set_step") def set_next(self, frame): self.call("set_next", frame._fid) def set_return(self, frame): self.call("set_return", frame._fid) def set_quit(self): self.call("set_quit") def set_break(self, filename, lineno): msg = self.call("set_break", filename, lineno) return msg def clear_break(self, filename, lineno): msg = self.call("clear_break", filename, lineno) return msg def clear_all_file_breaks(self, filename): msg = self.call("clear_all_file_breaks", filename) return msg def start_remote_debugger(rpcclt, pyshell): """Start the subprocess debugger, initialize the debugger GUI and RPC link Request the RPCServer start the Python subprocess debugger and link. Set up the Idle side of the split debugger by instantiating the IdbProxy, debugger GUI, and debugger GUIAdapter objects and linking them together. Register the GUIAdapter with the RPCClient to handle debugger GUI interaction requests coming from the subprocess debugger via the GUIProxy. The IdbAdapter will pass execution and environment requests coming from the Idle debugger GUI to the subprocess debugger via the IdbProxy. """ global idb_adap_oid idb_adap_oid = rpcclt.remotecall("exec", "start_the_debugger",\ (gui_adap_oid,), {}) idb_proxy = IdbProxy(rpcclt, pyshell, idb_adap_oid) gui = Debugger.Debugger(pyshell, idb_proxy) gui_adap = GUIAdapter(rpcclt, gui) rpcclt.register(gui_adap_oid, gui_adap) return gui def close_remote_debugger(rpcclt): """Shut down subprocess debugger and Idle side of debugger RPC link Request that the RPCServer shut down the subprocess debugger and link. Unregister the GUIAdapter, which will cause a GC on the Idle process debugger and RPC link objects. (The second reference to the debugger GUI is deleted in PyShell.close_remote_debugger().) """ close_subprocess_debugger(rpcclt) rpcclt.unregister(gui_adap_oid) def close_subprocess_debugger(rpcclt): rpcclt.remotecall("exec", "stop_the_debugger", (idb_adap_oid,), {}) def restart_subprocess_debugger(rpcclt): idb_adap_oid_ret = rpcclt.remotecall("exec", "start_the_debugger",\ (gui_adap_oid,), {}) assert idb_adap_oid_ret == idb_adap_oid, 'Idb restarted with different oid'
SILENT KILLER Tool