go-delve/delve · warning
interface type not yet supported by ebpf tracing
Error message
interface type not yet supported by ebpf tracing
What it means
When a traced argument resolves only to reflect.Interface via the eBPF UProbeArgMap and no DWARF type is available, synthesizeTypeFromKind marks the parameter Unreadable: an interface's dynamic type and value cannot be recovered from the raw register/stack bytes captured by the uprobe. The event still completes; this argument is just flagged unreadable.
Source
Thrown at pkg/proc/internal/ebpf/helpers.go:569
iparam.Kind = reflect.Uintptr
iparam.RealType = &godwarf.UintType{BasicType: godwarf.BasicType{CommonType: godwarf.CommonType{ByteSize: 8, ReflectKind: reflect.Uintptr}}}
case reflect.String:
if len(iparam.Data) >= 16 {
iparam.Base = fakeAddressUnresolv + uint64(valSize)
iparam.Len = int64(binary.LittleEndian.Uint64(iparam.Data[8:16]))
}
iparam.RealType = &godwarf.StringType{
StructType: godwarf.StructType{
CommonType: godwarf.CommonType{ByteSize: 16, ReflectKind: reflect.String},
Kind: "struct",
},
}
case reflect.Map:
iparam.Unreadable = fmt.Errorf("map type not yet supported by ebpf tracing")
case reflect.Chan:
iparam.Unreadable = fmt.Errorf("chan type not yet supported by ebpf tracing")
case reflect.Interface:
iparam.Unreadable = fmt.Errorf("interface type not yet supported by ebpf tracing")
case reflect.Func:
iparam.Unreadable = fmt.Errorf("func type not yet supported by ebpf tracing")
case reflect.Struct:
iparam.Unreadable = fmt.Errorf("struct type not yet supported by ebpf tracing without DWARF type")
case reflect.Array:
iparam.Unreadable = fmt.Errorf("array type not yet supported by ebpf tracing without DWARF type")
default:
iparam.Unreadable = fmt.Errorf("unrecognized reflect.Kind %d from eBPF", iparam.Kind)
}
}
func createFunctionParameterList(entry uint64, goidOffset int64, args []UProbeArgMap, isret bool) function_parameter_list_t {
var params function_parameter_list_t
params.goid_offset = uint32(goidOffset)
params.fn_addr = entry
params.is_ret = isret
params.n_parameters = 0
params.n_ret_parameters = 0View on GitHub (pinned to a23773e6c3)
Solutions
- Trace a concrete-typed wrapper function instead of the interface-typed entry point.
- Ensure the binary keeps full DWARF debug info so the argument's concrete DWARF type can be resolved upstream of synthesizeTypeFromKind.
- Handle Unreadable gracefully and display remaining arguments of the event.
- Check delve's eBPF supported-type list (int/uint/bool/float/complex/string/pointer/slice) before choosing arguments to trace.
Example fix
// before
dlv trace --ebpf logger.Log // Log(msg string, err error)
// err param shows: interface type not yet supported by ebpf tracing
// after
// trace the concrete-typed variant:
func (l *Logger) LogErrString(s string) { l.Log(s, errors.New(s)) }
dlv trace --ebpf logger.LogErrString Defensive patterns
Strategy: type-guard
Validate before calling
// Detect interface-typed parameters before tracing:
func hasInterfaceParam(types []godwarf.Type) bool {
for _, t := range types {
if t != nil && t.Common().ReflectKind == reflect.Interface {
return true
}
}
return false
} Type guard
func isInterfaceParam(p *RawUProbeParam) bool {
return p != nil && p.Kind == reflect.Interface
} Try / catch
if p.Unreadable != nil && strings.Contains(p.Unreadable.Error(), "interface type not yet supported") {
fmt.Printf("param %s: <interface value unavailable via eBPF>\n", p.Name)
continue
} Prevention
- Trace concrete-typed functions rather than interface-parameter entry points.
- Verify DWARF info is present so the argument resolves with a full type.
- Always test Unreadable on trace-event parameters before use.
- Consult the documented eBPF supported-type list when choosing trace targets.
When it happens
Trigger: Tracing a function whose parameter is an interface type (e.g. error, io.Reader, any) through the eBPF backend when the DWARF type lookup failed or only the Kind was recorded, so handleParamEvent reaches 'case reflect.Interface'.
Common situations: 'dlv trace --ebpf' on functions accepting io.Writer/error/any parameters; tracing interface-heavy APIs; running with binaries lacking complete DWARF info.
Related errors
- map type not yet supported by ebpf tracing
- chan type not yet supported by ebpf tracing
- func type not yet supported by ebpf tracing
- eBPF map not loaded
- eBPF is disabled
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/95f535f5d8f7e322.
Report an issue: GitHub.