go-delve/delve · error

could not load swiss map group ctrl: %v

Error message

could not load swiss map group ctrl: %v

What it means

Set on a map Variable by loadCurrentGroup when the 'ctrl' (control bytes) field of a swiss group cannot be resolved from DWARF. Delve needs the control bytes to skip empty/deleted slots via slotIsEmptyOrDeleted. Failure means the group struct type lacks a readable 'ctrl' field per the debug info. Delve throws it because iteration cannot classify slots without the control word.

Source

Thrown at pkg/proc/mapiter.go:670

	}

	it.tab = r
}

// loadCurrentGroup loads the group at index it.groupIdx of it.tab into it.group
func (it *mapIteratorSwiss) loadCurrentGroup() {
	group, err := it.tab.groups.sliceAccess(int(it.groupIdx))
	if err != nil {
		it.v.Unreadable = fmt.Errorf("could not load swiss map group: %v", err)
		return
	}

	g := &swissGroup{}

	var err2 error
	ctrl, err2 := group.toField(it.groupFieldCtrl)
	if err2 != nil {
		it.v.Unreadable = fmt.Errorf("could not load swiss map group ctrl: %v", err2)
		return
	}
	g.ctrls = make([]byte, ctrl.DwarfType.Size())
	_, err = ctrl.mem.ReadMemory(g.ctrls, ctrl.Addr)
	if err != nil {
		it.v.Unreadable = err
		return
	}

	if it.mapsplitgroup {
		g.keys, err2 = group.toField(it.groupFieldKeys)
		if err2 != nil {
			it.v.Unreadable = fmt.Errorf("could not load swiss map group keys: %v", err2)
			return
		}
		g.elems, err2 = group.toField(it.groupFieldElems)
		if err2 != nil {
			it.v.Unreadable = fmt.Errorf("could not load swiss map group elems: %v", err2)

View on GitHub (pinned to a23773e6c3)

Solutions

  1. Upgrade Delve to a release supporting your Go version's group layout
  2. Rebuild the target with a supported Go toolchain and complete DWARF
  3. Check 'go version <binary>' and consult Delve release notes for supported Go versions
  4. As a workaround, copy map data into a slice/struct the debugger reads reliably before inspecting
Defensive patterns

Strategy: type-guard

Validate before calling

if v.Unreadable != nil { return v.Unreadable } // group ctrl field missing in DWARF

Type guard

func iterableView(v *proc.Variable) bool { return v != nil && v.Unreadable == nil }

Try / catch

if v.Unreadable != nil { showRawPointerView(v); return } // degrade gracefully

Prevention

When it happens

Trigger: Iterating a swiss map when group.toField(it.groupFieldCtrl) fails: the group type in DWARF has no 'ctrl' field, or its type differs from what the Delve version expects (e.g. ctrl vs ctrl element type changes across Go versions).

Common situations: Go runtime internals changed (groupSlider/group layout refactors); binary built with a Go release newer than the Delve version; partially optimized builds omitting struct field info.

Related errors


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