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
- Build the SymbolTable with New over the same binary that produced the address
- Verify the address came from Sym2Addr or runtime.FuncForPC on a function in this binary
- 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
- Capture addresses and look them up with the same binary build
- Rebuild the symbol table whenever the binary is relinked
- Use runtime.FuncForPC as a fallback resolver
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
- no symbol
- Unknown file format
- AfterProcessingTime trigger set without a delay or…
- array len mismatch. decoding
- At least one subtrigger required for composite triggers.
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)