go-delve/delve · error

size must be a positive integer (<=8)

Error message

size must be a positive integer (<=8)

What it means

The `-size` flag controls byte width per memory chunk and must be an integer between 1 and 8 inclusive, since Delve reads machine-word-sized chunks. Any non-numeric value, a value <= 0, or a value > 8 produces this error.

Source

Thrown at service/api/command.go:254

		case "-count", "-len":
			arg := nextArg()
			if arg == "" {
				return nil, errors.New("expected argument after -count/-len")
			}
			var err error
			out.Count, err = strconv.ParseInt(arg, 0, 64)
			if err != nil || out.Count <= 0 {
				return nil, errors.New("count/len must be a positive integer")
			}
		case "-size":
			arg := nextArg()
			if arg == "" {
				return nil, errors.New("expected argument after -size")
			}
			var err error
			out.Size, err = strconv.ParseInt(arg, 0, 64)
			if err != nil || out.Size <= 0 || out.Size > 8 {
				return nil, errors.New("size must be a positive integer (<=8)")
			}
		case "-x":
			out.IsExpr = true
			// remaining args are going to be interpreted as expression
			out.Operand = strings.Join(args, " ")
			break loop
		default:
			if len(args) > 0 {
				return nil, fmt.Errorf("unknown option %q", args[0])
			}
			out.Operand = cmd
			break loop // only one arg left to be evaluated as a uint
		}
	}

	if len(out.Operand) == 0 {
		return nil, errors.New("no address specified")
	}

View on GitHub (pinned to a23773e6c3)

Solutions

  1. Use a -size value between 1 and 8 (typically 1, 2, 4, or 8)
  2. Express large reads via a bigger -count instead of a bigger -size
  3. Clamp client-side to min(max(size,1),8) before sending

Example fix

// before
"x -count 4 -size 16 0xc000010000"
// after
"x -count 16 -size 1 0xc000010000"
Defensive patterns

Strategy: validation

Validate before calling

func clampSize(n int64) int64 {
	if n < 1 { return 1 }
	if n > 8 { return 8 }
	return n
}

Prevention

When it happens

Trigger: `examineMemory` with `-size 0`, `-size 16`, `-size abc`, or any value outside 1..8; also when a client computes size from a type's byte size larger than 8 (e.g. a 16-byte struct).

Common situations: Reading wider types (int128, structs, big floats) and passing their full byte size; confusing -size (per-chunk bytes, max 8) with total byte count; IDE form fields unconstrained up to 64.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31). Data as JSON: /api/errors/72cf686e272592a7. Report an issue: GitHub.