go-delve/delve · error
at least one of read and write must be set for watchpoint
Error message
at least one of read and write must be set for watchpoint
What it means
Error "at least one of read and write must be set for watchpoint" thrown in go-delve/delve.
Source
Thrown at pkg/proc/breakpoints.go:722
fde, err := bi.frameEntries.FDEForPC(uprobePC)
if err != nil {
return 0, 0, fmt.Errorf("no FDE for uprobe PC %#x: %w", uprobePC, err)
}
framectx, err := fde.EstablishFrame(uprobePC)
if err != nil {
return 0, 0, fmt.Errorf("cannot establish frame at uprobe PC %#x: %w", uprobePC, err)
}
if framectx.CFA.Rule != frame.RuleCFA {
return 0, 0, fmt.Errorf("unexpected CFA rule %d at uprobe PC %#x", framectx.CFA.Rule, uprobePC)
}
return uprobePC, framectx.CFA.Offset, nil
}
// SetWatchpoint sets a data breakpoint at addr and stores it in the
// process wide break point table.
func (t *Target) SetWatchpoint(logicalID int, scope *EvalScope, expr string, wtype WatchType, cond ast.Expr) (*Breakpoint, error) {
if (wtype&WatchWrite == 0) && (wtype&WatchRead == 0) {
return nil, errors.New("at least one of read and write must be set for watchpoint")
}
n, err := parser.ParseExpr(expr)
if err != nil {
return nil, err
}
xv, err := scope.evalAST(n)
if err != nil {
return nil, err
}
if xv.Addr == 0 || xv.Flags&VariableFakeAddress != 0 || xv.DwarfType == nil {
return nil, fmt.Errorf("can not watch %q", expr)
}
if xv.Unreadable != nil {
return nil, fmt.Errorf("expression %q is unreadable: %v", expr, xv.Unreadable)
}
if xv.Kind == reflect.UnsafePointer || xv.Kind == reflect.Invalid {
return nil, fmt.Errorf("can not watch variable of type %s", xv.Kind.String())View on GitHub (pinned to a23773e6c3)
When it happens
Trigger: Thrown at pkg/proc/breakpoints.go:722 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/8043250aa23759ac.
Report an issue: GitHub.