mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Debugger Exception Info and GUI Stack Exception Traceback: finish
implementation.
This commit is contained in:
		
							parent
							
								
									1de41bfbc0
								
							
						
					
					
						commit
						f50d0f96a2
					
				
					 1 changed files with 23 additions and 10 deletions
				
			
		|  | @ -21,6 +21,7 @@ | |||
| """ | ||||
| 
 | ||||
| import sys | ||||
| import types | ||||
| import rpc | ||||
| import Debugger | ||||
| 
 | ||||
|  | @ -33,6 +34,7 @@ | |||
| frametable = {} | ||||
| dicttable = {} | ||||
| codetable = {} | ||||
| tracebacktable = {} | ||||
| 
 | ||||
| def wrap_frame(frame): | ||||
|     fid = id(frame) | ||||
|  | @ -40,10 +42,16 @@ def wrap_frame(frame): | |||
|     return fid | ||||
| 
 | ||||
| def wrap_info(info): | ||||
|     "replace info[2], a traceback instance, by its ID" | ||||
|     if info is None: | ||||
|         return None | ||||
|     else: | ||||
|         return None # XXX for now | ||||
|         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: | ||||
| 
 | ||||
|  | @ -53,6 +61,7 @@ def __init__(self, conn, 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)), | ||||
|                              {}) | ||||
|  | @ -84,7 +93,10 @@ def set_return(self, fid): | |||
|     def get_stack(self, fid, tbid): | ||||
|         ##print >>sys.__stderr__, "get_stack(%s, %s)" % (`fid`, `tbid`) | ||||
|         frame = frametable[fid] | ||||
|         tb = None # XXX for now | ||||
|         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(frame), k) for frame, k in stack] | ||||
|  | @ -104,6 +116,7 @@ def clear_break(self, filename, lineno): | |||
| 
 | ||||
|     def clear_all_file_breaks(self, filename): | ||||
|         msg = self.idb.clear_all_file_breaks(filename) | ||||
|         return msg | ||||
|      | ||||
|     #----------called by a FrameProxy---------- | ||||
| 
 | ||||
|  | @ -263,11 +276,10 @@ def __init__(self, conn, gui): | |||
|         self.conn = conn | ||||
|         self.gui = gui | ||||
| 
 | ||||
|     def interaction(self, message, fid, iid): | ||||
|         ##print "interaction: (%s, %s, %s)" % (`message`,`fid`, `iid`) | ||||
|     def interaction(self, message, fid, modified_info): | ||||
|         ##print "interaction: (%s, %s, %s)" % (message, fid, modified_info) | ||||
|         frame = FrameProxy(self.conn, fid) | ||||
|         info = None # XXX for now | ||||
|         self.gui.interaction(message, frame, info) | ||||
|         self.gui.interaction(message, frame, modified_info) | ||||
| 
 | ||||
| 
 | ||||
| class IdbProxy: | ||||
|  | @ -286,8 +298,9 @@ def run(self, cmd, locals): | |||
|         # Ignores locals on purpose! | ||||
|         self.call("run", cmd) | ||||
| 
 | ||||
|     def get_stack(self, frame, tb): | ||||
|         stack, i = self.call("get_stack", frame._fid, None) | ||||
|     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 | ||||
| 
 | ||||
|  | @ -315,7 +328,7 @@ def clear_break(self, filename, lineno): | |||
| 
 | ||||
|     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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kurt B. Kaiser
						Kurt B. Kaiser