NationalSecurityAgency/ghidra · error · RuntimeError
Not connected
Error message
Not connected
What it means
Raised as RuntimeError by State.require_client() when STATE.client is None — i.e. no connection to Ghidra's trace RMI bridge exists yet. Any trace command that needs the socket must connect first via ghidra_trace_connect()/ghidra_trace_listen().
Source
Thrown at Ghidra/Debug/Debugger-agent-drgn/src/main/py/src/ghidradrgn/commands.py:105
def require_mm(self) -> arch.DefaultMemoryMapper:
if self.memory_mapper is None:
raise RuntimeError("No memory mapper")
return self.memory_mapper
def require_rm(self) -> arch.DefaultRegisterMapper:
if self.register_mapper is None:
raise RuntimeError("No register mapper")
return self.register_mapper
class State(object):
def __init__(self) -> None:
self.reset_client()
def require_client(self) -> Client:
if self.client is None:
raise RuntimeError("Not connected")
return self.client
def require_no_client(self) -> None:
if self.client != None:
raise RuntimeError("Already connected")
def reset_client(self) -> None:
self.client: Optional[Client] = None
self.reset_trace()
def require_trace(self) -> Trace[Extra]:
if self.trace is None:
raise RuntimeError("No trace active")
return self.trace
def require_no_trace(self) -> None:
if self.trace != None:
raise RuntimeError("Trace already started")View on GitHub (pinned to d5f144c24d)
Solutions
- Call ghidra_trace_connect('host:port') (or ghidra_trace_listen) and confirm the 'Connected ...' message before trace commands.
- Guard: if STATE.client is None: report 'connect first'.
- If a prior connect raised, inspect the port/host and retry connect before continuing.
Example fix
// before
STATE.require_client().create_trace(...) # RuntimeError: Not connected
// after
if STATE.client is None:
ghidra_trace_connect(address)
STATE.require_client().create_trace(...) Defensive patterns
Strategy: validation
Validate before calling
if STATE.client is None:
raise RuntimeError('call ghidra_trace_connect/listen first')
client = STATE.require_client() Type guard
def is_connected() -> bool:
return getattr(STATE, 'client', None) is not None Try / catch
try:
client = STATE.require_client()
except RuntimeError as e:
if 'Not connected' in str(e):
ghidra_trace_connect(address); client = STATE.require_client()
else:
raise Prevention
- Call ghidra_trace_connect('host:port') before any client-dependent command.
- Confirm the 'Connected ...' message before proceeding.
- Re-connect after ghidra_trace_disconnect() rather than reusing a reset client.
When it happens
Trigger: Calling ghidra_trace_start(), start_trace(), or any client-dependent command before ghidra_trace_connect()/ghidra_trace_listen() succeeded; after ghidra_trace_disconnect() reset the client.
Common situations: Running trace commands in the wrong order; connect() failed silently (port closed) leaving client None; reconnecting after a disconnect without a fresh connect.
Related errors
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/c103dd5cfcd00b3f.
Report an issue: GitHub.