"""Trace every uproc RPC handler with enter/leave hooks. Run from the tool root: ./greeneye.sh run examples/scripts/trace_rpc.py The script namespace provides ``s``/``session``, ``memory``, ``symbols``, ``recorder`` and ``ge`` (the greeneye package). """ NAMES = ["rpc_ping", "rpc_echo", "rpc_fill", "rpc_sum", "rpc_state", "rpc_fault"] events = [] for name in NAMES: sym = symbols.get(name) if sym is None: print(f"symbol {name} not found") continue s.hook( sym.addr, on_enter=lambda hit: events.append(("enter", hit.label(), hit.arg(0))), on_leave=lambda hit: events.append(("leave", hit.label(), hit.retval)), ) s.run(duration=1.0) print(f"{len(events)} hook events:") for kind, label, value in events: print(f" {kind:5} {label:14} {value:#018x}") recorder.event("trace_complete", events=len(events))