apache/beam · error

no symbol found at address

Error message

no symbol found at address %x

What it means

SymbolTable.Addr2Sym looks up a symbol name by function address in a prebuilt addr->name map. This error means the address (after subtracting the table's load offset) is not present in the table, so no known symbol corresponds to it.

Solutions

  1. Build the SymbolTable with New over the same binary that produced the address
  2. Verify the address came from Sym2Addr or runtime.FuncForPC on a function in this binary
  3. Check the offset base: rebuild the table if the binary was relinked (addresses shift between builds)

Example fix

// before
name, err := table.Addr2Sym(somePtr) // somePtr from another module
// after
if fn := runtime.FuncForPC(uintptr(somePtr)); fn != nil {
    name = fn.Name() // falls back to runtime lookup
} else {
    name, err = table.Addr2Sym(uintptr(somePtr))
}
Defensive patterns

Strategy: validation

Validate before calling

if fn := runtime.FuncForPC(addr); fn == nil { return errors.New("address has no backing function in this binary") }

Type guard

func isKnownSym(s *symtab.SymbolTable, addr uintptr) bool { _, err := s.Addr2Sym(addr); return err == nil }

Try / catch

name, err := table.Addr2Sym(addr)
if err != nil {
    if fn := runtime.FuncForPC(uintptr(addr)); fn != nil { name = fn.Name() }
    return err
}

Prevention

When it happens

Trigger: Calling Addr2Sym with a uintptr that was not obtained via Sym2Addr/New for this binary, an address from a different binary or shared object, or a dynamically-loaded function the table was never populated with.

Common situations: Translating runtime function pointers across plugin/DLL boundaries, binaries rebuilt since addresses were captured, or cgo/dlopen-loaded code absent from the static symbol table.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/84fb25ffbdcdceea. Report an issue: GitHub.

Appendix: source

Thrown at sdks/go/pkg/beam/core/util/symtab/symtab.go:167

	}
	return addr2Sym, sym2Addr, nil
}

// fnname returns the name of the function that called it.
func fnname() string {
	var pcs [2]uintptr
	n := runtime.Callers(2, pcs[:])
	frames := runtime.CallersFrames(pcs[:n])
	frame, _ := frames.Next()
	return frame.Func.Name()
}

// Addr2Sym returns the symbol name for the provided address.
func (s *SymbolTable) Addr2Sym(addr uintptr) (string, error) {
	addr -= s.offset
	sym, ok := s.addr2Sym[addr]
	if !ok {
		return "", errors.Errorf("no symbol found at address %x", addr)
	}
	return sym, nil
}

// Sym2Addr returns the address of the provided symbol name.
func (s *SymbolTable) Sym2Addr(symbol string) (uintptr, error) {
	addr, ok := s.sym2Addr[symbol]
	if !ok {
		return 0, errors.Errorf("no symbol %q", symbol)
	}
	return addr + s.offset, nil
}

View on GitHub (pinned to 12126d8942)