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

  1. Rebuild the binary with a supported, unmodified Go toolchain.
  2. Avoid obfuscators/strip tools that rewrite pclntab; rebuild plainly.
  3. Report the panic value (%v payload) to Delve as a bug - logflags.Bug is incremented by design.
  4. 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

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


AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31). Data as JSON: /api/errors/06d2abd67b5a3934. Report an issue: GitHub.