go-delve/delve · error
failed to get xstate info: %v
Error message
failed to get xstate info: %v
What it means
On FreeBSD/amd64 the native backend reads the XSAVE area size via PT_GETXSTATE_INFO to read extended CPU register state (XMM, AVX). ptraceGetXsaveLen caches this length; if the ptrace call fails it stores a negative length plus this wrapped error. Failure means the kernel does not support the xstate ptrace interface or the tid is invalid.
Source
Thrown at pkg/proc/native/ptrace_freebsd_amd64.go:29
"unsafe"
"github.com/go-delve/delve/pkg/proc/amd64util"
"github.com/go-delve/delve/pkg/proc/native/cpuid"
)
var (
xsaveLen int
xsaveErr error
)
func ptraceGetXsaveLen(tid int) (int, error) {
var info C.struct_ptrace_xstate_info
ret, err := C.ptrace(C.PT_GETXSTATE_INFO, C.pid_t(tid), C.caddr_t(unsafe.Pointer(&info)), C.int(unsafe.Sizeof(info)))
if ret == 0 {
xsaveLen = int(info.xsave_len)
} else {
xsaveLen, xsaveErr = -1, err
return xsaveLen, fmt.Errorf("failed to get xstate info: %v", err)
}
return xsaveLen, nil
}
func ptraceXsaveLen(tid int) (int, error) {
if xsaveLen > 0 {
return xsaveLen, nil
}
if xsaveLen < 0 {
return xsaveLen, fmt.Errorf("failed to get xstate info: %v", xsaveErr)
}
return ptraceGetXsaveLen(tid)
}
// ptraceGetXsave gets the X86 XSAVE data for the given tid.
func ptraceGetXsave(tid int) ([]byte, error) {
len, err := ptraceXsaveLen(tid)
if err != nil {View on GitHub (pinned to a23773e6c3)
Solutions
- Check the wrapped ptrace error in %v (errno) — ESRCH usually means the thread exited; retry with a live thread.
- Verify kernel support: sysctl hw.instruction and FreeBSD version >= 9 with XSAVE enabled.
- Ensure XSAVE is enabled in BIOS/hypervisor (it can be disabled in some VM configurations).
- Update Delve — FreeBSD register support continues to evolve.
Example fix
// before pw.error: failed to get xstate info: no such process // (thread exited before register read) // after # ensure the process is still stopped/alive before reading registers proc status <pid> # or re-select a live goroutine in delve dlv attach <pid>
Defensive patterns
Strategy: retry
Try / catch
v, err := eval.Variable("someVar")
if err != nil && strings.Contains(err.Error(), "failed to get xstate info") {
// check errno in message: ESRCH -> thread exited, re-select live goroutine and retry
} Prevention
- Ensure the target stays stopped/alive while reading registers.
- Enable XSAVE in BIOS/hypervisor configuration.
- Use a FreeBSD version with xstate ptrace support.
When it happens
Trigger: Register/register-info evaluation on FreeBSD when PT_GETXSTATE_INFO fails — unsupported kernel (pre-xsave ptrace interface), non-amd64 mismatch, or dead/invalid thread id.
Common situations: Running an older FreeBSD kernel without XSAVE ptrace support; debugging a thread that just exited (stale tid); virtualized environments restricting ptrace xstate operations.
Related errors
- failed to get xstate: %v
- failed to set xstate: %v
- failed to get FP registers: %v
- failed to set FP registers: %v
- procstat_getprocs returned no processes
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/230c89e77432e411.
Report an issue: GitHub.