NationalSecurityAgency/ghidra · error · RuntimeError

Usage: ghidra trace put-available

Error message

Usage: ghidra trace put-available

What it means

Raised by ghidra_trace_put_available when any argument is passed. put-available publishes the list of attachable/available processes (from util.AVAILABLE_INFO_READER) into the trace's Available list; it is parameterless and rejects tokens at commands.py:1524.

Source

Thrown at Ghidra/Debug/Debugger-agent-lldb/src/main/py/src/ghidralldb/commands.py:1524

        else:
        	procobj.set_value('Name', proc.name())
        	procobj.set_value('_display', f'{proc.pid} {proc.name()}')
        procobj.insert()
    trace.proxy_object_path(AVAILABLES_PATH).retain_values(keys)


@convert_errors
def ghidra_trace_put_available(debugger: lldb.SBDebugger, command: str,
                               result: lldb.SBCommandReturnObject,
                               internal_dict: Dict[str, Any]) -> None:
    """Put the list of available processes into the trace's Available list.

    Usage: ghidra trace put-available
    """

    args = shlex.split(command)
    if len(args) != 0:
        raise RuntimeError("Usage: ghidra trace put-available")

    trace, tx = STATE.require_tx()
    with trace.client.batch() as b:
        put_available()


def put_single_breakpoint(b: lldb.SBBreakpoint, proc: lldb.SBProcess) -> None:
    trace = STATE.require_trace()
    mapper = trace.extra.require_mm()
    bpt_path = PROC_BREAK_PATTERN.format(
        procnum=proc.GetProcessID(), breaknum=b.GetID())
    bpt_obj = trace.create_object(bpt_path)
    if b.IsHardware():
        bpt_obj.set_value('Expression', util.get_description(b))
        bpt_obj.set_value('Kinds', 'X')
    else:
        bpt_obj.set_value('Expression', util.get_description(b))
        bpt_obj.set_value('Kinds', 'x')

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Invoke with no arguments: `ghidra trace put-available`.
  2. Configure available-process discovery at the LLDB/platform level, not via this command's arguments.

Example fix

// before
ghidra trace put-available remote
// after
ghidra trace put-available
Defensive patterns

Strategy: validation

Validate before calling

assert len(command.split()) == 0, "put-available takes no arguments"

Prevention

When it happens

Trigger: Calling `ghidra trace put-available local`, appending a filter/pid, or stray text after the command. Users sometimes try to scope the available list to a host or pid.

Common situations: Misreading the command as taking a remote host or platform filter; copying a command template that left a placeholder token un-substituted.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/b4d3cb3d47a4f636. Report an issue: GitHub.