{"record":{"id":"d1a07072d86d0009","repo":"go-delve/delve","slug":"unknown-backend-q","errorCode":null,"errorMessage":"unknown backend %q","messagePattern":"unknown backend %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"service/debugger/debugger.go","lineNumber":342,"sourceCode":"\t\t\td.recordingDone()\n\t\t\td.target = grp\n\t\t\tif err := d.checkGoVersion(); err != nil {\n\t\t\t\td.log.Error(err)\n\t\t\t\terr := d.target.Detach(true)\n\t\t\t\tif err != nil {\n\t\t\t\t\td.log.Errorf(\"Error detaching from target: %v\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t\treturn nil, nil\n\n\tcase \"default\":\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\treturn betterGdbserialLaunchError(gdbserial.LLDBLaunch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, [3]string{d.config.Stdin, d.config.Stdout.Path, d.config.Stderr.Path}))\n\t\t}\n\t\treturn native.Launch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, d.config.Stdin, d.config.Stdout, d.config.Stderr)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown backend %q\", d.config.Backend)\n\t}\n}\n\nfunc (d *Debugger) recordingStart(stop func() error) {\n\td.recordMutex.Lock()\n\td.stopRecording = stop\n\td.recordMutex.Unlock()\n}\n\nfunc (d *Debugger) recordingDone() {\n\td.recordMutex.Lock()\n\td.stopRecording = nil\n\td.recordMutex.Unlock()\n}\n\nfunc (d *Debugger) isRecording() bool {\n\td.recordMutex.Lock()\n\tdefer d.recordMutex.Unlock()","sourceCodeStart":324,"sourceCodeEnd":360,"githubUrl":"https://github.com/go-delve/delve/blob/a23773e6c31361e43246bc43a424ee009679b174/service/debugger/debugger.go#L324-L360","documentation":"Delve's Launch dispatches on config.Backend (\"native\", \"lldb\", \"rr\", or \"default\"). When the configured backend string does not match any supported backend case, Launch returns this error instead of starting the debuggee. It means the client selected a backend name Delve does not recognize on this platform.","triggerScenarios":"Calling debugger.New (which calls Launch) with Config.Backend set to a misspelled or unsupported value, e.g. \"Native\", \"gdbserial\", \"core\", or an empty string that survives defaulting. The default: branch in Launch is reached only for values outside the known set.","commonSituations":"Typo in --backend flag on the dlv command line; environment or config file exporting an invalid backend; tools embedding delve passing a backend name valid on another OS (e.g. \"rr\" on a system without rr, or macOS-only names); newer/older delve versions where a backend was renamed or removed.","solutions":["Check the backend value passed in Config.Backend / the --backend flag; correct it to one of \"default\", \"native\", \"lldb\", or \"rr\".","Remove or unset the backend override so delve falls back to \"default\".","Run `dlv backend` help or check Documentation/usage to list valid backends for your platform.","If embedding delve via API, validate Config.Backend before calling debugger.New."],"exampleFix":"// before\ncfg.Backend = \"Native\"\n// after\ncfg.Backend = \"native\" // one of: default, native, lldb, rr","handlingStrategy":"validation","validationCode":"var validBackends = map[string]bool{\"default\": true, \"native\": true, \"lldb\": true, \"rr\": true}\nif !validBackends[cfg.Backend] {\n    return fmt.Errorf(\"unsupported backend %q\", cfg.Backend)\n}\ngrp, err := debugger.New(&cfg, processArgs)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only pass backend values from a fixed allowlist, never raw user/env input.","Default to \"default\" (empty string) unless a specific backend is required.","Document platform-specific backends in your launcher config."],"tags":["debugger","configuration","backend-selection"],"backgroundTag":"unknown-backend","analyzedSha":"a23773e6c31361e43246bc43a424ee009679b174","analyzedAt":"2026-08-31T15:12:45.221Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}