{"record":{"id":"84fb25ffbdcdceea","repo":"apache/beam","slug":"no-symbol-found-at-address-x","errorCode":null,"errorMessage":"no symbol found at address %x","messagePattern":"no symbol found at address %x","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/core/util/symtab/symtab.go","lineNumber":167,"sourceCode":"\t}\n\treturn addr2Sym, sym2Addr, nil\n}\n\n// fnname returns the name of the function that called it.\nfunc fnname() string {\n\tvar pcs [2]uintptr\n\tn := runtime.Callers(2, pcs[:])\n\tframes := runtime.CallersFrames(pcs[:n])\n\tframe, _ := frames.Next()\n\treturn frame.Func.Name()\n}\n\n// Addr2Sym returns the symbol name for the provided address.\nfunc (s *SymbolTable) Addr2Sym(addr uintptr) (string, error) {\n\taddr -= s.offset\n\tsym, ok := s.addr2Sym[addr]\n\tif !ok {\n\t\treturn \"\", errors.Errorf(\"no symbol found at address %x\", addr)\n\t}\n\treturn sym, nil\n}\n\n// Sym2Addr returns the address of the provided symbol name.\nfunc (s *SymbolTable) Sym2Addr(symbol string) (uintptr, error) {\n\taddr, ok := s.sym2Addr[symbol]\n\tif !ok {\n\t\treturn 0, errors.Errorf(\"no symbol %q\", symbol)\n\t}\n\treturn addr + s.offset, nil\n}\n","sourceCodeStart":149,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/core/util/symtab/symtab.go#L149-L180","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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)"],"exampleFix":"// before\nname, err := table.Addr2Sym(somePtr) // somePtr from another module\n// after\nif fn := runtime.FuncForPC(uintptr(somePtr)); fn != nil {\n    name = fn.Name() // falls back to runtime lookup\n} else {\n    name, err = table.Addr2Sym(uintptr(somePtr))\n}","handlingStrategy":"validation","validationCode":"if fn := runtime.FuncForPC(addr); fn == nil { return errors.New(\"address has no backing function in this binary\") }","typeGuard":"func isKnownSym(s *symtab.SymbolTable, addr uintptr) bool { _, err := s.Addr2Sym(addr); return err == nil }","tryCatchPattern":"name, err := table.Addr2Sym(addr)\nif err != nil {\n    if fn := runtime.FuncForPC(uintptr(addr)); fn != nil { name = fn.Name() }\n    return err\n}","preventionTips":["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"],"tags":["symbol-table","lookup-failed","go"],"backgroundTag":"resource-not-found","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}