go-delve/delve · error
you must specify a thread
Error message
you must specify a thread
What it means
The 'thread' command requires a numeric thread ID argument; this error is returned when it is invoked with no argument. Delve cannot switch threads without knowing which one to target.
Source
Thrown at pkg/terminal/command.go:849
}
prefix := " "
if state.CurrentThread != nil && state.CurrentThread.ID == th.ID {
prefix = "* "
}
if th.Function != nil {
fmt.Fprintf(t.stdout, "%sThread %d at %#v %s:%d %s\n",
prefix, th.ID, th.PC, t.formatPath(th.File),
th.Line, th.Function.Name())
} else {
fmt.Fprintf(t.stdout, "%sThread %s\n", prefix, t.formatThread(th))
}
}
return nil
}
func thread(t *Term, ctx callContext, args string) error {
if len(args) == 0 {
return errors.New("you must specify a thread")
}
tid, err := strconv.Atoi(args)
if err != nil {
return err
}
oldState, err := t.client.GetState()
if err != nil {
return err
}
newState, err := t.client.SwitchThread(tid)
if err != nil {
return err
}
oldThread := "<none>"
newThread := "<none>"
if oldState.CurrentThread != nil {
oldThread = strconv.Itoa(oldState.CurrentThread.ID)View on GitHub (pinned to a23773e6c3)
Solutions
- Run 'threads' first to list available thread IDs
- Use 'thread <id>' with a numeric ID, e.g. 'thread 3'
- Use 'goroutine <n>' if you actually meant to switch goroutines
Example fix
// before (dlv) thread // after (dlv) threads (dlv) thread 5
Defensive patterns
Strategy: validation
Validate before calling
// Ensure a numeric thread id is provided
parts := strings.Fields(args)
if len(parts) != 1 {
return errors.New("usage: thread <tid>")
}
if _, err := strconv.Atoi(parts[0]); err != nil {
return fmt.Errorf("thread id must be an integer: %v", err)
} Try / catch
err := term.ExecuteCommand("thread " + args)
if err != nil && strings.Contains(err.Error(), "you must specify a thread") {
// list threads and prompt for an id
st, _ := client.ListThreads()
printThreadChoices(st)
} Prevention
- Run 'threads' before switching to know valid IDs
- Remember 'thread' requires an ID; it does not list threads
- Use 'goroutine <n>' when you mean goroutines, not OS threads
When it happens
Trigger: Typing 'thread' alone at the (dlv) prompt instead of 'thread <tid>'.
Common situations: Habit from other debuggers where 'thread' lists or selects interactively; forgetting the ID after checking 'threads'.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- command not available
- too many arguments to goroutine
- not enough arguments
- Invalid frame %d
- Backtick not supported in '%s'
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/eee83789825be92b.
Report an issue: GitHub.