{"record":{"id":"d9770867bb5c6df5","repo":"NationalSecurityAgency/ghidra","slug":"cannot-find-path-to-breakpoint-specifications","errorCode":null,"errorMessage":"Cannot find path to breakpoint specifications","messagePattern":"Cannot find path to breakpoint specifications","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/PlaceEmuBreakpointActionItem.java","lineNumber":83,"sourceCode":"\n\tprivate TraceObject findBreakpointContainer() {\n\t\tTraceMemoryRegion region = findRegion();\n\t\tif (region == null) {\n\t\t\tthrow new IllegalArgumentException(\"Address does not belong to a memory in the trace\");\n\t\t}\n\t\treturn region.getObject().findSuitableContainerInterface(TraceBreakpointSpec.class);\n\t}\n\n\tprivate String computePath() {\n\t\tString name = createName(address);\n\t\tTraceObject container = findBreakpointContainer();\n\t\tif (container == null) {\n\t\t\tthrow new IllegalArgumentException(\n\t\t\t\t\"Address is not associated with a breakpoint container\");\n\t\t}\n\t\tPathFilter specFilter = container.getSchema().searchFor(TraceBreakpointSpec.class, true);\n\t\tif (specFilter == null) {\n\t\t\tthrow new IllegalArgumentException(\"Cannot find path to breakpoint specifications\");\n\t\t}\n\t\tKeyPath specRelPath = specFilter.applyKeys(name).getSingletonPath();\n\t\tif (specRelPath == null) {\n\t\t\tthrow new IllegalArgumentException(\"Too many wildcards to breakpoint specification\");\n\t\t}\n\t\tPathFilter locFilter = container.getSchema()\n\t\t\t\t.getSuccessorSchema(specRelPath)\n\t\t\t\t.searchFor(TraceBreakpointLocation.class, true);\n\t\tif (locFilter == null) {\n\t\t\tthrow new IllegalArgumentException(\"Cannot find path to breakpoint locations\");\n\t\t}\n\t\tKeyPath locRelPath = locFilter.applyIntKeys(0).getSingletonPath();\n\t\tif (locRelPath == null) {\n\t\t\tthrow new IllegalArgumentException(\"Too many wildcards to breakpoint location\");\n\t\t}\n\t\treturn container.getCanonicalPath().extend(specRelPath).extend(locRelPath).toString();\n\t}\n","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/PlaceEmuBreakpointActionItem.java#L65-L101","documentation":"Thrown by computePath when the container schema's searchFor(TraceBreakpointSpec.class, true) returns a null PathFilter, meaning the schema has no path to any object implementing the breakpoint specification interface. The path computation cannot proceed without knowing where specs live.","triggerScenarios":"container.getSchema().searchFor(TraceBreakpointSpec.class, true) returns null on a schema that does not model breakpoint specifications at all.","commonSituations":"A trace object schema that omits the breakpoint specification element; a schema variant for a target type that does not support breakpoints; corrupted or hand-built trace schemas.","solutions":["Use the standard managed-object schema that defines breakpoint specification paths.","Recreate the trace with the debugger's default schema so searchFor(TraceBreakpointSpec.class) resolves.","Verify the schema includes a TraceBreakpointSpec-typed element reachable from the container.","Do not offer the 'Place Emulated Breakpoint' action for schemas lacking breakpoint support."],"exampleFix":"// before\nPathFilter specFilter = container.getSchema().searchFor(TraceBreakpointSpec.class, true);\nif (specFilter == null) throw ...; // 'Cannot find path to breakpoint specifications'\n\n// after (precondition check)\nif (container.getSchema().searchFor(TraceBreakpointSpec.class, true) == null) {\n    throw new IllegalStateException(\n        \"Trace schema does not support breakpoint specifications: \" + container);\n}","handlingStrategy":"validation","validationCode":"PathFilter f = container.getSchema().searchFor(TraceBreakpointSpec.class, true);\nboolean ok = f != null;","typeGuard":"static boolean schemaHasSpecPath(TraceObject container) {\n    return container.getSchema().searchFor(TraceBreakpointSpec.class, true) != null;\n}","tryCatchPattern":"try {\n    item.execute();\n} catch (IllegalArgumentException e) {\n    Msg.showError(this, null, \"Schema missing specs\", e.getMessage());\n}","preventionTips":["Adopt the default debugger schema that defines breakpoint spec paths.","Validate schema breakpoint support before use."],"tags":["breakpoint","emu","schema","path","trace"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}