{"record":{"id":"071726c4ca33a4fe","repo":"NationalSecurityAgency/ghidra","slug":"no-register-mapper-071726","errorCode":null,"errorMessage":"No register mapper","messagePattern":"No register mapper","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Debugger-agent-gdb/src/main/py/src/ghidragdb/commands.py","lineNumber":85,"sourceCode":"MODULE_PATTERN = MODULES_PATTERN + MODULE_KEY_PATTERN\nSECTIONS_ADD_PATTERN = '.Sections'\nSECTION_KEY_PATTERN = '[{secname}]'\nSECTION_ADD_PATTERN = SECTIONS_ADD_PATTERN + SECTION_KEY_PATTERN\n\n\nclass Extra(object):\n    def __init__(self) -> None:\n        self.memory_mapper: Optional[arch.DefaultMemoryMapper] = None\n        self.register_mapper: Optional[arch.DefaultRegisterMapper] = None\n\n    def require_mm(self) -> arch.DefaultMemoryMapper:\n        if self.memory_mapper is None:\n            raise RuntimeError(\"No memory mapper\")\n        return self.memory_mapper\n\n    def require_rm(self) -> arch.DefaultRegisterMapper:\n        if self.register_mapper is None:\n            raise RuntimeError(\"No register mapper\")\n        return self.register_mapper\n\n\nclass State(object):\n\n    def __init__(self) -> None:\n        self.reset_client()\n\n    def require_client(self) -> Client:\n        if self.client is None:\n            raise gdb.GdbError(\"Not connected\")\n        return self.client\n\n    def require_no_client(self) -> None:\n        if self.client is not None:\n            raise gdb.GdbError(\"Already connected\")\n\n    def reset_client(self) -> None:","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Debugger-agent-gdb/src/main/py/src/ghidragdb/commands.py#L67-L103","documentation":"Thrown as a RuntimeError by Extra.require_rm() in the gdb agent when the register_mapper attribute has not been set (is None). Analogous to error 172 but for register translation. The register_mapper is assigned during start_trace from arch.compute_register_mapper(language).","triggerScenarios":"Calling any command that reads or writes registers before ghidra_trace_start has been called, or after the trace was reset. The require_rm() accessor checks for None and raises.","commonSituations":"Issuing register-read commands before starting the trace; trace initialization failed at create_trace before register_mapper assignment; disconnect and reconnect without re-starting the trace.","solutions":["Call ghidra_trace_start successfully before any register-related command.","Verify STATE.trace.extra.register_mapper is not None before calling require_rm().","After ghidra_trace_disconnect, call ghidra_trace_start again before register operations."],"exampleFix":"// before\nghidra_trace_connect('127.0.0.1:12345')\nghidra_trace_get_register('rax')  # fails: no trace started\n// after\nghidra_trace_connect('127.0.0.1:12345')\nghidra_trace_start('myprogram')\nghidra_trace_get_register('rax')","handlingStrategy":"validation","validationCode":"def ensure_register_mapper() -> arch.DefaultRegisterMapper:\n    if STATE.trace is None:\n        raise RuntimeError('No active trace. Call ghidra_trace_start first.')\n    rm = STATE.trace.extra.register_mapper\n    if rm is None:\n        raise RuntimeError('Register mapper not initialized. Trace may have failed to start.')\n    return rm","typeGuard":"def has_register_mapper() -> bool:\n    return (\n        STATE.trace is not None\n        and STATE.trace.extra is not None\n        and STATE.trace.extra.register_mapper is not None\n    )","tryCatchPattern":"try:\n    STATE.trace.extra.require_rm()\nexcept RuntimeError as e:\n    if 'No register mapper' in str(e):\n        ghidra_trace_start()  # reinitialize trace\n    raise","preventionTips":["Always call ghidra_trace_start before any register command.","After disconnect/reconnect, re-run ghidra_trace_start.","Check STATE.trace.extra.register_mapper for None before use."],"tags":["gdb","lifecycle","register-mapping","initialization"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}