go-delve/delve · error
error loading binary info from Go runtime: %v
Error message
error loading binary info from Go runtime: %v
What it means
loadBinaryInfoGoRuntime recovers all panics from the best-effort Go runtime symbol parsing and converts them into this error. It indicates readPcLnTableElf (or related pclntab parsing) panicked - malformed or unexpected runtime metadata - rather than returning a normal error.
Source
Thrown at pkg/proc/bininfo.go:2362
sec.Name = longname
break
}
}
}
}
// GO RUNTIME INFO ////////////////////////////////////////////////////////////
// loadBinaryInfoGoRuntimeElf loads information from the Go runtime sections
// of an ELF binary, it is only called when debug info has been stripped.
func loadBinaryInfoGoRuntimeElf(bi *BinaryInfo, image *Image, path string, elfFile *elf.File) (err error) {
// This is a best-effort procedure, it can go wrong in unexpected ways, so
// recover all panics.
defer func() {
ierr := recover()
if ierr != nil {
logflags.Bug.Inc()
err = fmt.Errorf("error loading binary info from Go runtime: %v", ierr)
}
}()
cu := &compileUnit{}
cu.image = image
symTable, symTabAddr, err := readPcLnTableElf(elfFile, path)
if err != nil {
return err
}
image.symTable = symTable
// In Go 1.26+, moduledata is in the .go.module section.
// In earlier versions, we need to search for it in .noptrdata.
var md []byte
if goModuleSec := elfFile.Section(".go.module"); goModuleSec != nil {
// Go 1.26+: .go.module section contains moduledata directly
md, err = goModuleSec.Data()
if err != nil {View on GitHub (pinned to a23773e6c3)
Solutions
- Rebuild the binary with a supported, unmodified Go toolchain.
- Avoid obfuscators/strip tools that rewrite pclntab; rebuild plainly.
- Report the panic value (%v payload) to Delve as a bug - logflags.Bug is incremented by design.
- Fall back to providing DWARF debug info so the runtime-symbol path is not needed.
Example fix
// before // app built with: garble -tiny build -o app (pclntab mangled) // after // rebuild normally so pclntab is intact: go build -o app ./cmd/app
Defensive patterns
Strategy: try-catch
Validate before calling
// best-effort check: binary should carry Go pclntab
f, err := elf.Open(path)
if err != nil { return err }
if f.Section(".gopclntab") == nil {
fmt.Println("warning: Go runtime symbol table may be missing")
} Try / catch
tgt, err := dbg.Launch(path)
if err != nil && strings.Contains(err.Error(), "error loading binary info from Go runtime") {
log.Printf("pclntab parse panicked: %v - rebuild binary", err)
} Prevention
- Rebuild with an unmodified, supported Go toolchain.
- Avoid obfuscation tools (garble, etc.) that mangle pclntab.
- Keep DWARF present so the runtime-symbol fallback is not required.
- Report persistent panics to Delve maintainers with the panic payload.
When it happens
Trigger: A panic inside the Go-runtime symbol table reader (bad pclntab offsets, unexpected memory layout, nil deref on a non-Go or corrupted binary) during binary info loading.
Common situations: Pointing Delve at a corrupted binary, a binary built by an unsupported Go version, or a binary whose pclntab was obfuscated/removed (e.g. garble).
Related errors
- could not read debug info (%v) and could not read go symbol
- could not create symbol table from %s
- panic executing starlark script: %v
- short read
- can not continue execution of core process
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/06d2abd67b5a3934.
Report an issue: GitHub.