apache/beam · error
no symbol
Error message
no symbol %q
What it means
SymbolTable.Sym2Addr returns the address for a symbol name. This error means the symbol name string is not a key in the table's sym2Addr map — the named function was never registered or does not exist in this binary.
Solutions
- Check the exact symbol spelling including package path (e.g. github.com/apache/beam/sdks/go/pkg/beam.func)
- Confirm the function is actually linked in (not eliminated by the linker) and referenced somewhere
- List the table's known symbols (or use addr2name tooling) to find the correct name
Example fix
// before
addr, err := table.Sym2Addr("beam.createFn.Call") // typo
// after
addr, err := table.Sym2Addr("github.com/apache/beam/sdks/go/pkg/beam.(*createFn).Call") Defensive patterns
Strategy: validation
Validate before calling
if symbol == "" { return errors.New("empty symbol name") } // and verify symbol exists in table before use Type guard
func hasSym(s *symtab.SymbolTable, name string) bool { _, err := s.Sym2Addr(name); return err == nil } Try / catch
addr, err := table.Sym2Addr(symbol)
if err != nil { return fmt.Errorf("cannot resolve %q: %w", symbol, err) } Prevention
- Use fully-qualified Go symbol names copied from the source, including package path
- Account for method receivers: (*T).M vs T.M forms
- Avoid referencing symbols that the linker may dead-code-eliminate
When it happens
Trigger: Calling Sym2Addr with a misspelled function name, an unexported/inlined function not present in the table, or a symbol from a package not linked into the binary that built the table (New calls Sym2Addr internally).
Common situations: Typo'd fully-qualified Go symbol names in configuration, function renamed after a refactor, or symbol dead-code-eliminated by the linker.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- no symbol found at address
- 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/0bd02d43054a3fad.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/go/pkg/beam/core/util/symtab/symtab.go:176
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)