MCPcopy Create free account
hub / github.com/OpenImageDebugger/OpenImageDebugger / GdbBridge

Class GdbBridge

resources/oidscripts/debuggers/gdbbridge.py:16–147  ·  view source on GitHub ↗

GDB Bridge class, exposing the common expected interface for the OpenImageDebugger to access the required buffer data and interact with the debugger.

Source from the content-addressed store, hash-verified

14from oidscripts.logger import log
15
16class GdbBridge(BridgeInterface):
17 """
18 GDB Bridge class, exposing the common expected interface for the OpenImageDebugger
19 to access the required buffer data and interact with the debugger.
20 """
21 def __init__(self, type_bridge):
22 self._type_bridge = type_bridge
23 self._commands = dict(plot=PlotterCommand(self))
24 self._event_handler = None # type: BridgeEventHandlerInterface
25
26 self._pending_requests = []
27 self._lock = threading.Lock()
28
29 gdb.events.stop.connect(self._event_stop_handler)
30 gdb.events.exited.connect(self._event_exit_handler)
31
32 event_loop_thread = threading.Thread(target=self.event_loop)
33 event_loop_thread.daemon = True
34 event_loop_thread.start()
35
36 def event_loop(self):
37 while True:
38 requests_to_process = []
39 with self._lock:
40 requests_to_process = self._pending_requests
41 self._pending_requests = []
42
43 while requests_to_process:
44 callback = requests_to_process.pop(0)
45 gdb.post_event(callback)
46
47 time.sleep(0.1)
48
49 def queue_request(self, callable_request):
50 with self._lock:
51 self._pending_requests.append(callable_request)
52
53 def get_backend_name(self):
54 return 'gdb'
55
56 def get_buffer_metadata(self, variable):
57 picked_obj = gdb.parse_and_eval(variable)
58
59 buffer_metadata = self._type_bridge.get_buffer_metadata(
60 variable, picked_obj, self)
61
62 if buffer_metadata is None:
63 # Invalid symbol for current frame
64 return None
65
66 bufsize = sysinfo.get_buffer_size(
67 buffer_metadata['height'],
68 buffer_metadata['channels'],
69 buffer_metadata['type'],
70 buffer_metadata['row_stride']
71 )
72
73 # Check if buffer is initialized

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected