Skip to content
CAI
Software that uses CAICheck a score

go-delve/delve

69.2

Adequate · 24 September 2026

75.9k

lines of production code

Go

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a low-level debugger for the Go programming language, providing capabilities to inspect, control, and analyze running processes and crash dumps. It supports a wide range of architectures and operating systems, offering features such as breakpoint management, variable inspection, and eBPF-based tracing. The system exposes its functionality through a terminal interface, a JSON-RPC API, and the Debug Adapter Protocol for integration with IDEs.

How it got here

2014–2017 — Service architecture and DWARV5 support

37 changes.

This period focused on restructuring the debugger into a modular service with a new RPC2 API and client/server separation, enabling remote debugging and protocol unification. Significant architectural improvements included refactoring the DWARF parsing logic to support DWARFv5, introducing a unified process backend, and adding core file and GDB serial protocol support.

2018–2020 — DAP integration and platform expansion

23 changes.

This period focused on integrating the Debug Adapter Protocol (DAP) to enable native support for IDE frontends like VS Code, while significantly expanding platform coverage through new Linux, FreeBSD, and Windows minidump capabilities. The work also introduced Starlark scripting for the terminal, modernized the logging subsystem, and enhanced low-level debugging features such as DWARF v5 support and hardware register management.

2021–2024 — multi-architecture expansion and eBPF tracing

26 changes.

The project significantly expanded its platform support by adding native debugging capabilities for ARM64 on Windows, LoongArch64, and RISC-V, alongside standardized DWARF register mappings. Concurrently, it introduced advanced tracing features via an eBPF backend for parameter capture and implemented a new stack-machine expression evaluation engine to improve debugger performance and accuracy.

2025–2026 — debugger detection and test infrastructure

6 changes.

This period focused on enhancing runtime debugger detection capabilities through the new debugdetect package and expanding test coverage with various fixtures for process spawning, dynamic loading, and ARM64 trampolines. Additionally, the project migrated its vendored YAML library to the official go.yaml.in repository to ensure long-term maintenance and compatibility.

Features

Add ARM64 register support for Windows debugging

The Windows process debugger now supports ARM64 architectures in addition to the existing AMD64 support. This change introduces new register handling implementations for ARM64 (regs\_arm64\_arch.go) alongside the existing AMD64 implementation (regs\_amd64\_arch.go), enabling users to debug Go applications running on Windows ARM64 hardware.

pkg/proc/winutil · high confidence

Add AST utility functions for expression generation

A new \pkg/astutil\ package has been introduced to provide helper functions for constructing Go AST expressions. This includes utilities for creating equality checks (\Eql\), selector expressions (\Sel\, \PkgVar\), integer literals (\Int\), and logical operators (\And\, \Or\), as well as a function to convert AST expressions back to strings (\ExprToString\). These tools are intended to simplify the generation of \ast.Expr\ nodes within the \pkg/proc\ package.

pkg/astutil · high confidence

Add ELF core file writing capabilities

The pkg/elfwriter package now provides functionality to write ELF files, specifically targeting core dumps. This includes a new Writer struct that handles ELF headers, program headers, and section headers, along with support for writing notes (including Delve-specific notes) and section headers with string tables. This enables the creation of core files without loading the entire file into memory at once.

pkg/elfwriter · high confidence

Add capslock static analysis and documentation generation scripts

The \_scripts directory now includes automation for running Google's capslock static analysis tool across all supported platforms (darwin, linux, windows on amd64, arm64, 386, ppc64le, riscv64) and generating the corresponding output files. Additionally, new Go scripts are introduced to generate CLI documentation, FAQ table of contents, opcode definitions, and backend test health reports, replacing manual or external generation processes.

_\scripts · high confidence

Add core file and minidump debugging support

The debugger can now analyze crash dumps. This change introduces a new \pkg/proc/core\ backend that reads Linux ELF core files (supporting amd64, arm64, riscv64, and loong64 architectures) and Windows minidumps, allowing users to inspect the state of a process at the moment of a crash.

pkg/proc/core · high confidence

Add errgroup package with context cancellation and goroutine limiting

The vendor directory now includes the errgroup package, which provides synchronization, error propagation, and context cancellation for groups of goroutines. This addition introduces the Group type, allowing users to manage concurrent subtasks where the first error cancels the associated context and is returned by Wait. It also supports limiting the number of active goroutines via SetLimit and offers a TryGo method for non-blocking submission.

vendor/golang.org/x/sync · high confidence

Add support for Windows minidump files

The debugger can now load and analyze Windows minidump files, which serve as the Windows equivalent of Unix core dumps. This new capability allows users to debug crashed Windows applications by parsing minidump structures such as thread lists, module information, and memory ranges directly from the dump file.

pkg/proc/core/minidump · high confidence

Added Go telemetry and crash reporting support

The vendor directory now includes the golang.org/x/telemetry package, enabling opt-in telemetry collection and crash reporting for Go toolchain programs. This adds a counter system for recording public metrics (such as flag usage and completion errors) and a crash monitor that captures runtime crashes and reports them as telemetry data. The implementation includes configuration management for uploading data, platform-specific memory mapping for counter files, and Windows-specific process handling to ensure reliable crash reporting.

vendor/golang.org/x/telemetry · high confidence

Added LoongArch64 (loong64) assembly support

The vendor directory now includes the \golang.org/x/arch/loong64\ package, providing the ability to decode, encode, and disassemble LoongArch64 (loong64) instructions. This adds support for the LoongArch architecture to the native backend, enabling assembly analysis for this new platform.

vendor/golang.org/x/arch/loong64 · high confidence

Added hardware debug register and XSAVE state utilities for AMD64

The \pkg/proc/amd64util\ package now includes \debugregs.go\ and \xsave.go\, providing utilities to manage x86 debug registers (enabling, clearing, and retrieving hardware breakpoints) and to decode AMD64 XSAVE areas (parsing legacy, AVX, and AVX-512 register states). This adds low-level support for inspecting and manipulating CPU debug and extended state registers, which is essential for accurate watchpoint handling and register state recovery during debugging.

pkg/proc/amd64util · high confidence

Added ppc64le machine code disassembler support

The vendor directory now includes the \golang.org/x/arch/ppc64/ppc64asm\ package, providing the ability to decode and disassemble 64-bit PowerPC (ppc64le) machine code. This addition introduces core decoding logic, instruction tables, and syntax formatters for both GNU and Plan 9 assemblers, enabling tools that rely on this location to analyze or display ppc64le binaries.

vendor/golang.org/x/arch/ppc64 · high confidence

Added vendored go-colorable library for Windows console color support

The application now includes the vendored github.com/mattn/go-colorable library, enabling ANSI color escape sequences to be rendered correctly in Windows console applications. This change allows colored output (e.g., from loggers) to function on Windows without requiring external tools like ansicon, by providing platform-specific writers that handle terminal capabilities.

vendor/github.com/mattn/go-colorable · high confidence

Debuginfod client implementation with progress notifications and source listing

The debuginfod client now supports downloading debug information with real-time progress notifications via a verbose mode that parses stderr output, and adds the capability to retrieve source code listings directly using the debuginfod-find tool.

pkg/proc/debuginfod · high confidence

Delve terminal interface restructured into the pkg/terminal package

The interactive debugger interface has been consolidated into the \pkg/terminal\ package, introducing a comprehensive command system with categorized groups (running, breakpoints, data, goroutines, stack) and a new \config\ command for managing aliases, substitute paths, and debug info directories. The terminal now features syntax highlighting for source listings, automatic paging for large outputs, and a transcript writer for session logging. Additionally, an embedded Starlark scripting environment is available for custom automation, and the \exit\ command now supports a \-d\ flag to detach from the target process without killing it.

pkg/terminal · high confidence

Go syntax highlighting for source listings

The terminal now provides syntax-highlighted output when printing Go source code listings. This new \pkg/terminal/colorize\ module parses Go files using the standard library AST and applies distinct color styles to keywords, strings, numbers, and comments, improving readability in the debugger interface.

pkg/terminal/colorize · high confidence

Initial GDB Serial Protocol backend implementation

The \pkg/proc/gdbserial\ package is introduced to provide a debugger backend using the Gdb Remote Serial Protocol. This enables Delve to connect to and debug targets via \gdbserver\, \lldb-server\, macOS \debugserver\, and Mozilla \rr\. The implementation includes platform-specific handling for Unix and Windows, support for recording and replaying execution with \rr\, and a check to detect and prevent execution under Apple Rosetta translation on macOS.

pkg/proc/gdbserial · high confidence

Initial TeamCity CI configuration with multi-platform Go test matrix

The project now defines its continuous integration pipeline using a new \.teamcity/settings.kts\ script. This configuration establishes a structured hierarchy of projects and build types for testing across multiple operating systems (Linux, Windows, macOS) and architectures (amd64, 386, arm64, ppc64le, riscv64). It explicitly includes a test matrix for Go versions 1.25, 1.26, 1.27, and tip, while excluding Windows ARM64 and Loong64 from the current scope. The setup integrates with GitHub for pull request handling and commit status publishing, sets the TeamCity UI to read-only, and configures specific triggers, such as daily scheduled runs for tip builds.

.teamcity · high confidence

Initial plugin support fixtures added

Added two new Go source files, plugin1.go and plugin2.go, to the \_fixtures directory. These files define simple exported functions and types (such as Fn1, HelloFn, Fn2, and the asomethingelse struct with its Callback2 method) intended to serve as test fixtures for the newly introduced plugin support feature in the debugger.

_\_fixtures/plugin1, \fixtures/plugin2 · high confidence

Initial release of the service/debugger package

The service/debugger package is introduced as a new component, providing a higher-level abstraction over the internal process backend. It handles the conversion of internal types to client-facing types and manages core debugging functionalities such as launching new processes, attaching to existing ones, and managing breakpoints. The package includes platform-specific implementations for error reporting (e.g., detailed Yama ptrace scope checks on Linux) and comprehensive test coverage for launch scenarios, executable validation, and TTY support.

service/debugger · high confidence

Introduce JSON-RPC debugger service with client/server separation

The service layer now exposes a remote debugger API via a new client/server architecture, allowing external tools to connect to a headless debugging instance. This change introduces a \Client\ interface for synchronous debugger operations (such as continuing, stepping, setting breakpoints, and inspecting variables) and a \Server\ interface for managing the remote connection lifecycle. It also adds configuration options for listener setup, multi-client support, and API versioning, along with an in-memory listener pipe for local non-headless connections.

service · high confidence

Introduce Starlark scripting bindings for the Delve terminal

Users can now write and execute scripts in the Delve terminal using the Starlark language. This change adds a new \pkg/terminal/starbind\ package that provides a REPL, converts debugger API values (such as variables, structs, and slices) into Starlark types, and exposes built-in functions like \dlv\_command\, \read\_file\, \write\_file\, and \append\_file\ to interact with the debugging session and the host filesystem.

pkg/terminal/starbind · high confidence

Introduce built-in DAP server in service/dap

This change adds a new \service/dap\ package that implements the Debug Adapter Protocol (DAP) directly within Delve, allowing it to function as a DAP server for frontends like VS Code without a separate adaptor. The implementation includes the core server and session logic (\server.go\, \session.go\), configuration handling for launch/attach requests (\config.go\, \types.go\), command parsing for the DAP console (\command.go\), and error code definitions (\error\_ids.go\). It supports standard debugging modes (debug, test, exec, replay, core), variable inspection with handle-based references, and configuration options such as substitute paths and pprof labels.

service/dap · high confidence

Introduce comprehensive configuration system with extensive terminal customization options

The \pkg/config\ package now provides a structured configuration system that allows users to customize the Delve debugger's behavior and appearance via a YAML config file. This includes options for controlling source code display (line counts, arrow/keyword/string/number/comment/tab colors, and line colors), terminal prompt customization (prompt text and color), disassembly output (flavor selection), variable evaluation limits (max string length, array values, recursion depth, and timeout), and path substitution rules. The system also supports command aliases, debug info directory configuration, and specific display toggles like showing raw strings or DWARF location expressions.

pkg/config · high confidence

Introduce dedicated DWARF reader and variable visibility logic

The package now includes a new \pkg/dwarf/reader\ module containing \reader.go\ and \variables.go\. The \Reader\ type provides utilities for navigating DWARF debug information, including seeking to specific entries, resolving type attributes (with optional typedef/pointer resolution), and locating named symbols. The \Variables\ function introduces configurable logic for determining variable visibility within lexical blocks, supporting flags to skip inlined subroutines, enforce strict declaration line checks, or identify captured closure variables.

pkg/dwarf/reader · high confidence

Introduce eBPF-based procedure parameter tracing

The eBPF tracing backend now supports capturing and reporting function input and return parameters. This change implements a header-and-parameter event ring buffer protocol to transmit trace data from the kernel to userspace, defines the necessary BPF structures and Go-side data types for parameter parsing, and adds build scripts and a Docker image to compile the eBPF objects.

pkg/proc/internal/ebpf · high confidence

Introduce locspec package for breakpoint location parsing and path substitution

The new \pkg/locspec\ package provides the core logic for parsing breakpoint location strings (such as file:line, function names, regexes, offsets, and addresses) and applying substitute-path rules to map source file paths. This includes support for Windows and Unix path formats, case-insensitive matching on Windows, and exact path matching, enabling consistent breakpoint resolution across different operating systems and build environments.

pkg/locspec · high confidence

Introduction of RPC API version 2

The service/rpc2 package introduces a new RPC-based debugging API (version 2), providing both client and server implementations that communicate via JSON-RPC over TCP. This new API layer exposes debugger capabilities such as process state retrieval, command execution (continue, step, next, rewind), breakpoint management, and event handling, serving as the communication bridge for external clients connecting to the Delve debugger.

service/rpc2 · high confidence

Native backend core dump and hardware breakpoint support across platforms

The native debugger backend now supports creating core dumps and utilizing hardware breakpoints on Linux, FreeBSD, and Windows. On Linux, the backend reads process memory maps from /proc/pid/smaps and generates ELF notes (NT\_PRPSINFO, NT\_PRSTATUS, NT\_X86\_XSTATE) to capture full process state, including XSAVE areas for modern CPUs. FreeBSD gains core dump support via kinfo\_getvmmap, while Windows implements memory map retrieval using VirtualQueryEx. Additionally, x86/x86\_64 architectures now support hardware breakpoints via debug registers, with platform-specific stubs provided for architectures that do not support this feature.

pkg/proc/native · high confidence

New DWARF section builder package

The new \pkg/dwarf/dwarfbuilder\ package provides utilities to construct DWARF debug sections programmatically. It includes a \Builder\ type for assembling DWARF info and location lists, constants for DWARF forms and encodings, and helpers like \LocationBlock\ for encoding location expressions using LEB128.

pkg/dwarf/dwarfbuilder · high confidence

New debugdetect package for runtime debugger detection

Added the \pkg/debugdetect\ package, which provides utilities to detect if a process is currently being debugged by a ptrace-based debugger (such as Delve, GDB, or LLDB). The package exposes \IsDebuggerAttached()\ to check the debugger status and \WaitForDebugger()\ to block execution until a debugger connects, supporting Linux, macOS, Windows, and FreeBSD. This enables applications to adapt their behavior during startup when a debugger is present.

pkg/debugdetect · high confidence

New linutil package for Linux-specific process introspection

The new pkg/proc/linutil package provides shared utilities for the Linux native and core debug backends, introducing architecture-specific register wrappers for AMD64, I386, ARM64, Loong64, PPC64LE, and RISC-V64, along with helpers to parse ELF auxiliary vectors and dynamic linker structures.

pkg/proc/linutil · high confidence

Split out godwarf type parsing and DWARFv5 support into a dedicated package

The DWARF parsing logic has been extracted from the main debug/dwarf package into a new, dedicated \pkg/dwarf/godwarf\ package. This change introduces native support for DWARFv5 features, including the \debug\_addr\ section (parsed via \addr.go\) and compressed debug sections (handled in \sections.go\ with a workaround for Mach-O section name limitations). The package now provides a robust tree-based representation of DWARF entries (\tree.go\) that automatically resolves abstract origins and specifications, and includes comprehensive type definitions (\type.go\) with support for Go-specific attributes like \DW\_AT\_go\_package\_name\ and parametric type dictionaries. Helper utilities for buffer reading (\buf.go\) and synthetic type generation (\fakes.go\) are also included to support the debugger's internal type resolution.

pkg/dwarf/godwarf · high confidence

Support for DWARF version 5 location lists

The debugger can now parse DWARF version 5 location lists (loclists) and debug address tables (debug\_addr). This change introduces new readers in the loclist package that handle the specific binary formats and opcodes defined in the DWARF v5 standard, allowing accurate variable location resolution for binaries compiled with DWARF 5 debug information.

pkg/dwarf/loclist · high confidence

Unified RPC server supports both DAP and JSON-RPC on the same port

The service/rpccommon package now provides a single entry point that listens on one port and automatically routes incoming connections to either the Debug Adapter Protocol (DAP) or the legacy JSON-RPC API based on the connection's initial bytes. This allows clients to connect to the same debugger instance using either protocol without requiring separate server configurations or ports.

service/rpccommon · high confidence

Updated x86 instruction decoder with AVX-512 support

The vendored x86 assembly decoder in vendor/golang.org/x/arch/x86/x86asm has been updated to include comprehensive support for AVX, AVX2, and AVX-512 instruction sets. This change introduces new decoding logic for VEX and EVEX prefixes, adds generated instruction tables for a wide range of modern vector operations (such as KADDB, VADDPD, V4FMADDPS), and updates the syntax formatters (GNU, Intel, and Plan 9/Go) to correctly display these new instructions and their specific attributes like broadcast, zeroing, and rounding controls.

vendor/golang.org/x/arch/x86 · high confidence

eBPF tracing backend implementation added

The eBPF tracing backend in pkg/proc/internal/ebpf/bpf has been implemented with new C source files (trace.bpf.c) and a dummy Go file to satisfy vendoring requirements. The eBPF code introduces support for parsing function parameters of various types (strings, pointers, slices) by reading values from registers or the user stack, and submits these parameter events to a ring buffer for consumption by the debugger.

pkg/proc/internal/ebpf/bpf · high confidence

Security

Security check for local debugging connections on Linux

A new \sameuser\ package has been added to the service internals to enforce that local debugging connections (loopback) originate from the same UNIX user as the debugger. On Linux, the service now parses \/proc/net/tcp\ and \/proc/net/tcp6\ to verify the remote connection's UID against the local process UID, rejecting connections from different users to prevent unauthorized access. This check is skipped on non-Linux platforms where it is not implemented.

service/internal · high confidence

Architecture

Refactor DWARF line parser and extract LEB128 utilities into separate packages

The DWARF debug line parsing logic has been reorganized into the new \pkg/dwarf/line\ package, separating the core state machine, prologue parsing, and utility functions into dedicated files (\line\_parser.go\, \state\_machine.go\, \parse\_util.go\). Additionally, the LEB128 encoding and decoding logic has been extracted into its own \pkg/dwarf/leb128\ package to improve modularity. This change also includes updated tests for the line parser and LEB128 utilities, ensuring the refactored components function correctly with existing debug data formats.

pkg/dwarf/line · high confidence

Refactor process backend to use a unified Arch struct

The process backend has been refactored to replace the previous architecture handling with a unified \Arch\ struct. This change consolidates architecture-specific logic—such as register mappings, breakpoint instructions, frame unwinding rules, and assembly decoding—into a single, extensible object. This improves code organization and makes it easier to support new architectures or modify existing ones by centralizing the configuration and behavior for each CPU architecture.

pkg/proc · high confidence

Behavioural changes

DWARF frame parser refactored with new data structures and opcode support

The \pkg/dwarf/frame\ package has been restructured to improve the parsing and execution of DWARF Call Frame Information (CFI). The new implementation introduces dedicated data structures for Common Information Entries (CIE) and Frame Description Entries (FDE), including support for \eh\_frame\ pointer encodings. It also adds handling for the \DW\_CFA\_GNU\_args\_size\ opcode and implements a state stack to correctly manage \DW\_CFA\_remember\_state\ and \DW\_CFA\_restore\_state\ instructions. These changes enhance the accuracy of stack unwinding and frame context reconstruction for debuggers.

pkg/dwarf/frame · high confidence

Delve debugger now includes telemetry and enforces build flags

The dlv binary now automatically starts Go telemetry reporting (including crash reporting) on launch and ensures the CGO\_CFLAGS environment variable is set to -O0 -g if not already defined, preventing user overrides that could interfere with debugging. This change is implemented in the main entry point of the cmd/dlv package, which initializes the telemetry client and manages the build environment before executing the CLI commands.

cmd/dlv · high confidence

Improved Windows binary handling and build argument parsing in gobuild

The gobuild package now uses randomized temporary filenames for debug binaries to avoid race conditions, and implements an exponential backoff retry loop when removing these binaries on Windows to prevent 'access denied' errors. Additionally, build arguments are now parsed to ensure the -C (change directory) flag is passed first to the Go command, and the package supports both string and string-list inputs for build flags.

pkg/gobuild · high confidence

Lazy loading of floating-point registers on FreeBSD AMD64

The FreeBSD AMD64 register implementation now defers the retrieval of floating-point registers until they are explicitly requested. By introducing a \loadFpRegs\ callback and only invoking it when the \floatingPoint\ flag is true in the \Slice\ method, the debugger avoids unnecessary system calls and performance overhead during general register inspection, improving responsiveness when floating-point state is not needed.

pkg/proc/fbsdutil · high confidence

Logging subsystem migrated to Go's standard log/slog

The internal logging implementation in pkg/logflags has been replaced with Go's standard log/slog package. This change updates the default log level to Error and introduces a LoggerFactory interface, allowing users or integrators to inject custom logger implementations via SetLoggerFactory. The new system supports structured logging with named layers (e.g., debugger, rpc, dap) and ensures consistent output formatting across the debugger.

pkg/logflags · high confidence

New stack-machine-based expression evaluation engine

The expression evaluation logic in the debugger has been refactored to use a new stack-machine architecture located in the \pkg/proc/evalop\ package. This change introduces a new set of opcodes (defined in \ops.go\) and a compiler (\evalcompile.go\) that translates Go AST expressions into a sequence of stack-based instructions, replacing the previous evaluation approach. The new engine supports features such as pointer pinning for call injection, breakpoint hit count exposure in expressions, and optimized handling of struct literals and range-over-func statements, while also including a test to ensure all opcodes are exhaustively handled by the execution switch.

pkg/proc/evalop · high confidence

Refactor service API into modular components and update Go 1.27 wait reasons

The service/api package has been restructured into distinct files (command.go, conversions.go, types.go, waitreason.go, shorten\_type.go) to improve maintainability. This change introduces a new \ShortenType\ utility that condenses verbose Go package paths in type names (e.g., \long/package/path/pkg.A\ becomes \pkg.A\) for cleaner API responses. Additionally, the \waitreason.go\ file has been updated to include the latest goroutine wait reason strings for Go 1.27, ensuring accurate status reporting for goroutines in newer Go versions.

service/api · high confidence

Refactored breakpoint management and added eBPF tracing support

The debugger's breakpoint system has been refactored to support multiple overlapping breakpoints on a single address via a new 'Breaklet' structure, enabling more complex behaviors like deferred function tracing and stack watchpoints. Additionally, initial eBPF tracing support has been introduced, allowing the debugger to trace function parameters and return values using the cilium/ebpf library, with specific handling for goroutine IDs and parameter metadata. The variable pretty-printing logic has also been updated to support new formatting flags, such as shortening types and printing raw strings, improving the clarity of debug output.

github.com/go-delve/delve · high confidence

Standardized DWARF register mappings for amd64, arm64, i386, loong64, ppc64le, and riscv64

The \pkg/dwarf/regnum\ package now provides explicit, architecture-specific mappings between hardware registers and DWARF register numbers for amd64, arm64, i386, loong64, ppc64le, and riscv64. This change introduces dedicated source files for each supported architecture, ensuring that register names and numbers are correctly resolved according to their respective ABIs (such as System V AMD64, AArch64, and LoongArch). Users benefit from more accurate register identification and debugging output across these platforms, as the debugger can now reliably translate between internal DWARF indices and human-readable register names.

pkg/dwarf/regnum · high confidence

Support for inlining information in stripped binaries and replacement of LRU cache

The debugger can now resolve inlined function calls in stripped binaries by parsing Go 1.20+ symbol table formats (go:func prefixes) and extracting inline tree data from the pclntab section. Additionally, the internal LRU cache implementation has been replaced with a custom, thread-safe generic version to remove external dependencies.

pkg/internal · high confidence

Switched vendored command-line editor from peterh/liner to go-delve/liner

The vendored command-line editor library has been replaced from github.com/peterh/liner to github.com/go-delve/liner. This change updates the underlying implementation for interactive command-line input, history management, and tab completion used by the debugger's console, ensuring continued maintenance and compatibility with the Delve project's specific requirements.

vendor/github.com/go-delve · high confidence

Updated ARM64 instruction disassembler vendor library

The vendored \golang.org/x/arch/arm64/arm64asm\ package has been updated to a newer version, introducing new files for argument definitions, condition predicates, and decoding logic, along with a comprehensive JSON instruction table. This update improves the accuracy and coverage of ARM64 instruction decoding, which is utilized by native debuggers like Delve for analyzing ARM64 binaries on Linux.

vendor/golang.org/x/arch/arm64 · high confidence

Updated RISC-V 64-bit disassembler with full instruction support

The vendored RISC-V 64-bit architecture package (vendor/golang.org/x/arch/riscv64) has been updated to a newer version that includes comprehensive support for the RISC-V instruction set. This update adds the complete instruction decoding logic, operand definitions, and syntax formatting for GNU and Plan 9 assemblers. It specifically introduces support for vector instructions (RVV), compressed instructions (RVC), and a full set of control and status registers (CSRs), enabling accurate disassembly of modern RISC-V binaries.

vendor/golang.org/x/arch/riscv64 · high confidence

Updated supported Go versions to 1.25–1.27 and refined version parsing

Delve now requires Go 1.25 or later to debug binaries and enforces a maximum supported Go version of 1.27. The version parser has been updated to correctly handle development builds (e.g., \devel go1.24\), release candidates with trailing suffixes (e.g., \go1.26rc1-X:nodwarf5\), and toolchain modifiers. Additionally, debugging executables compiled with DWARFv5 or later now strictly requires Delve to be built with Go 1.25.0 or later.

pkg/goversion · high confidence

Updated vendored Blackfriday v2 Markdown processor

The vendored copy of github.com/russross/blackfriday/v2 has been updated to a newer version. This brings in the latest source code, including updated HTML entity definitions, improved inline and block parsing logic, and updated build configuration files (such as .travis.yml and .gitignore). Users benefit from the bug fixes, security hardening, and feature improvements included in this upstream release of the Markdown processor.

vendor/github.com/russross · high confidence

Updated vendored Cobra documentation generators

The vendored Cobra library in vendor/github.com/spf13/cobra/doc has been updated to a newer version (v1.1.3). This update refreshes the internal logic for generating documentation in Markdown, ReStructured Text, YAML, and man page formats. For users who rely on these generated documentation files, this change ensures compatibility with the latest Cobra features and bug fixes, such as improved handling of command hierarchies and flag descriptions in the output.

vendor/github.com/spf13/cobra/doc · medium confidence

Updated vendored go-isatty library with platform-specific terminal detection

The vendored copy of the go-isatty library has been updated to include comprehensive, platform-specific implementations for detecting terminal file descriptors. This change adds distinct logic for BSD, Linux/AIX/ZOS, Windows, Solaris, Plan 9, and other environments (such as App Engine or WebAssembly), ensuring accurate terminal detection across all supported operating systems. For Windows, it specifically improves Cygwin/MSYS2 terminal detection by checking pipe names. This update ensures the application correctly identifies interactive terminals on a wider range of platforms.

vendor/github.com/mattn/go-isatty · high confidence

Updated vendored go-runewidth library

The vendored copy of the go-runewidth library has been updated. This change includes new platform-specific implementations for detecting East Asian locales (POSIX, Windows, App Engine, and JS) and updates to the Unicode width tables, which may affect how the application calculates the display width of strings containing CJK or emoji characters in terminal or UI contexts.

vendor/github.com/mattn/go-runewidth · high confidence

Updated vendored golang.org/x/sys package

The vendored copy of the golang.org/x/sys package has been updated to a newer version. This brings in support for new system call interfaces, including dynamic CPU affinity handling on Linux, access to the ELF auxiliary vector, and enhanced assembly implementations for various architectures such as Z/OS and LoongArch.

vendor/golang.org/x/sys · high confidence

Updated vendored pflag library with new flag types and error handling

The vendored copy of the spf13/pflag library has been updated to a newer version. This update introduces new flag types for handling boolean functions (BoolFunc), slices of booleans (BoolSlice), and byte arrays in both hexadecimal and Base64 formats (BytesHex, BytesBase64). It also adds a Count flag type for incrementing values. Additionally, the update refines error handling by introducing specific error types such as NotExistError, ValueRequiredError, InvalidValueError, and InvalidSyntaxError, providing more detailed context for flag parsing issues. The FlagSet now supports an allowlist for parsing errors via ParseErrorsAllowlist, allowing users to ignore specific errors like unknown flags.

vendor/github.com/spf13/pflag · high confidence

Updated vendored pty library with expanded platform support

The vendored github.com/creack/pty package has been updated to a newer version that adds support for additional operating systems and architectures. This update includes new platform-specific implementations for Solaris and DragonFly BSD, as well as generated type definitions for newer architectures like LoongArch64 (loong64) and RISC-V variants. The library now also includes build infrastructure for cross-compilation testing via Dockerfiles and scripts, ensuring compatibility across a wider range of Unix-like environments.

vendor/github.com/creack · high confidence

Version reporting now uses Go module build info

The version reporting mechanism has been updated to derive build details from Go's runtime/debug package instead of relying on static placeholders or Makefile variables. The \pkg/version\ package now reads the module path, version, and dependencies via \debug.ReadBuildInfo\, and automatically resolves the build identifier from the \vcs.revision\ (or legacy \gitrevision\) setting in the build metadata. This ensures that the \--verbose\ output and version strings accurately reflect the actual module state and commit hash when built as a Go module, replacing the previous \$Id$\ placeholder with the real revision hash.

pkg/version · high confidence

Fixes

Add setymmreg fixture for debugserver register set workaround

Added a new Go assembly fixture (\_fixtures/setymmreg) containing a simple function that performs multiple XOR operations on the AX register. This fixture supports the debugserver register set bug workaround in the GDB serial protocol by providing a controlled code pattern for testing register state handling.

_\fixtures/setymmreg · medium confidence

Added AMD64 breakpoint fixture for testing software breakpoints

Added a new test fixture (\_fixtures/break) containing an assembly file (break\_amd64.s) and a Go main file (main.go) that invokes a single-byte software breakpoint instruction (0xcc). This fixture supports the fix for StepInstruction handling on 1-byte instructions with software breakpoints.

_\fixtures/break · high confidence

Fix DW\_OP\_shr and DW\_OP\_shra evaluation in DWARF location expressions

The DWARF location expression evaluator in pkg/dwarf/op now correctly distinguishes between logical right shift (DW\_OP\_shr) and arithmetic right shift (DW\_OP\_shra). Previously, negative values shifted with DW\_OP\_shra were handled incorrectly; the fix ensures that DW\_OP\_shra preserves the sign bit (arithmetic shift) while DW\_OP\_shr fills with zeros (logical shift), matching the DWARF specification. This change is verified by new tests in op\_test.go that explicitly check the behavior for negative shifted values.

pkg/dwarf/op · high confidence

Fix breakpoint confusion on resume

Added a test fixture (\_fixtures/nopbreakpoint) containing a Go program and its assembly code to address breakpoint handling issues during resume. The fixture includes a 'compromised' function that explicitly uses a hardcoded NOP instruction (0x90) to ensure the assembler does not strip it, allowing for reliable testing of breakpoint behavior in the presence of no-operation instructions.

_\fixtures/nopbreakpoint · high confidence

Fix pretty-printing for register components with large values

Added a new fixture (\_fixtures/xmm0print) that demonstrates and validates the correct handling of large register values. The Go source defines a function calling an assembly routine (VPSLLQ36) which performs a bitwise left shift on YMM registers, and the assembly file implements this intrinsic. This change ensures that the tool's pretty-printing logic correctly formats these large register components without overflow or truncation errors.

_\fixtures/xmm0print · high confidence

Test coverage

Add CGO stack trace test fixture; Add nodisasm fixture for assembly testing; Added CGO test fixture for multi-architecture variable inspection; Added DAP test client utilities and auto-generated response assertions; Added assembly fixture for nil pointer dereference testing; Added buildtest fixture for verifying test execution context; Added fake debuginfod-find fixture for testing download behavior; Added fixture for debugging stripped non-Go binaries; Added fixture for issue \#1656 regarding thread restart instructions; Added fixture for postfix if breakpoint conditions; Added linker trampoline test fixture for ARM64; Added non-executable fixture file for launch detection testing; Added nongochild fixture for testing spawned process events; Added test fixture for DWARF 5 file reference handling; Added tests for process I/O redirection parsing; Added x86 floating-point and AVX register test fixture; New integration test suite for the Delve service API; New test support infrastructure for building and caching debug fixtures; Updated test fixtures for debugger integration tests.

Dependencies

Added vendored copy of go-md2man v2

The vendor directory now includes the go-md2man v2 library, which converts Markdown documents into roff (man page) format. This addition enables the product to generate manual pages from Markdown source files using the blackfriday parser.

vendor/github.com/cpuguy83 · high confidence

Migrate YAML library to go.yaml.in/yaml/v3

The vendored YAML parsing and encoding library has been migrated from the legacy gopkg.in/yaml.v3 path to the official go.yaml.in/yaml/v3 repository. This update replaces the previous vendor files with the new canonical source maintained by the YAML organization, ensuring continued support and alignment with the official Go YAML package while preserving the same v3 API for encoding and decoding YAML data.

vendor/go.yaml.in · high confidence

Update Go dependencies and add TeamCity DSL build configuration

The project updates its Go module dependencies, including upgrading golang.org/x/sys to v0.46.0, golang.org/x/arch to v0.28.0, github.com/cilium/ebpf to v0.22.0, and github.com/google/go-dap to v0.12.0, while also adding golang.org/x/telemetry. Additionally, a new Maven-based configuration (\.teamcity/pom.xml\) is introduced to manage the TeamCity DSL scripts using Kotlin, establishing the build infrastructure for CI pipeline definitions.

(dependencies) · high confidence

Updated Starlark vendor library to include time module and thread cancellation support

The vendored go.starlark.net library has been updated, introducing a new 'time' module that exposes time-related functions and constants (such as now, parse\_duration, and from\_timestamp) to Starlark scripts. The update also incorporates a new mechanism for canceling Starlark threads, enhancing control over script execution. Additionally, the vendor directory now includes the library's LICENSE file and internal spell-checking utilities for improved error messages.

vendor/go.starlark.net · high confidence

Updated golang.org/x/arch to v0.11.0

The vendored golang.org/x/arch package has been updated to version 0.11.0. This update includes the addition of LICENSE and PATENTS files, ensuring proper attribution and patent licensing terms are present in the vendor directory.

vendor/golang.org/x/arch · high confidence

Updated vendored google/go-dap library to latest version

The vendored copy of the google/go-dap library has been updated to a newer version, bringing in updated protocol message types (such as StoppedEvent and ContinuedEvent bodies) and codec improvements for the Debug Adapter Protocol. This ensures the debugger client remains compatible with the latest DAP specification changes and improves JSON decoding robustness for debug sessions.

vendor/github.com/google · high confidence

Vendor mousetrap library to detect Windows explorer launches

The vendored copy of the \github.com/inconshreveable/mousetrap\ library has been updated to include its Apache 2.0 license, documentation, and platform-specific implementations. This allows the application to detect whether a Windows executable was launched by a user double-clicking in File Explorer (via \explorer.exe\) rather than from a command line, enabling more user-friendly error messages for CLI tools on Windows, while non-Windows platforms continue to return false.

vendor/github.com/inconshreveable · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 54 → 69 (+14.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 58 → 74 (+15.9)
  • Architecture 100 → 97 (-2.1)
  • Maturity 47 → 62 (+15.9)
  • Readiness 62 → 76 (+14.4)
  • Security 57 → 72 (+15.3)

Resolved (107)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (pkg/proc/eval.go)
  • Duplicated block (10 lines × 2) (pkg/proc/fbsdutil/regs.go)
  • Duplicated block (10 lines × 2) (pkg/proc/stack.go)
  • Duplicated block (10 lines × 2) (pkg/proc/stack_sigtramp.go)
  • Duplicated block (10 lines × 3) (service/debugger/debugger.go)
  • Duplicated block (10 lines × 3) (service/rpc2/server.go)
  • Duplicated block (11 lines × 2) (pkg/dwarf/parseutil.go)
  • Duplicated block (11 lines × 2) (pkg/proc/arm64_disasm.go)
  • Duplicated block (11 lines × 2) (pkg/proc/eval.go)
  • Duplicated block (11 lines × 2) (pkg/proc/fbsdutil/regs.go)
  • Duplicated block (11 lines × 4) (pkg/proc/amd64_arch.go)
  • Duplicated block (11 lines × 5) (pkg/proc/linutil/regs_amd64_arch.go)
  • Duplicated block (11 lines × 6) (pkg/proc/amd64_arch.go)
  • Duplicated block (12 lines × 2) (pkg/dwarf/godwarf/addr.go)
  • Duplicated block (12 lines × 2) (pkg/proc/dump.go)
  • Duplicated block (12 lines × 2) (pkg/proc/gdbserial/gdbserver_conn.go)
  • Duplicated block (12 lines × 2) (pkg/proc/gdbserial/rr.go)
  • Duplicated block (12 lines × 2) (pkg/proc/linutil/regs_loong64_arch.go)
  • …and 87 more

New (405)

  • ClassTooLong: BinaryInfo (pkg/proc/bininfo.go)
  • ClassTooLong: Commands (pkg/terminal/command.go)
  • ClassTooLong: Debugger (service/debugger/debugger.go)
  • ClassTooLong: EvalScope (pkg/proc/eval.go)
  • ClassTooLong: RPCServer (service/rpc2/server.go)
  • ClassTooLong: Session (service/dap/server.go)
  • ClassTooLong: Term (pkg/terminal/terminal.go)
  • ClassTooLong: Variable (pkg/proc/variables.go)
  • ClassTooLong: compileCtx (pkg/proc/evalop/evalcompile.go)
  • ClassTooLong: gdbConn (pkg/proc/gdbserial/gdbserver_conn.go)
  • ClassTooLong: gdbProcess (pkg/proc/gdbserial/gdbserver.go)
  • ClassTooLong: stackIterator (pkg/proc/stack.go)
  • Documentation: contradicts the code (Documentation/installation/README.md)
  • Duplicated block (10 lines × 2) (pkg/proc/stack_sigtramp.go)
  • Duplicated block (11 lines × 2) (pkg/dwarf/regnum/amd64.go)
  • Duplicated block (11 lines × 2) (pkg/proc/arm64_disasm.go)
  • Duplicated block (11 lines × 3) (pkg/proc/fbsdutil/regs.go)
  • Duplicated block (11 lines × 5) (pkg/proc/amd64_arch.go)
  • Duplicated block (11–12 lines × 3) (service/debugger/debugger.go)
  • Duplicated block (11–13 lines × 4) (pkg/proc/linutil/regs_arm64_arch.go)
  • …and 385 more

Changes since last survey

  • 32 commits — 29 feature/other, 3 fixes

By area

  • pkg/proc — 12 commits
  • .github/workflows — 5 commits
  • (root) — 4 commits
  • Documentation/cli — 2 commits
  • service/dap — 2 commits
  • _fixtures/cgotest.go — 1 commit
  • _scripts/capslock_darwin_amd64-output.txt — 1 commit
  • _scripts/test_linux.sh — 1 commit
  • pkg/gobuild — 1 commit
  • pkg/goversion — 1 commit
  • pkg/terminal — 1 commit
  • vendor/github.com — 1 commit

Notable commits

  • fix: proc: fix range-over-func next test on linux/loong64 (#4441)
  • fix: proc: fix TestCGlobal failure (#4451)
  • fix: proc: fix infinite loop in mapIteratorSwiss.next (#4433)
  • change: *: add scripts to setup / run eval fuzzer and run in CI (#4412)
  • change: *: v1.27.2 (#4446)
  • change: build(deps): bump github.com/cilium/ebpf from 0.11.0 to 0.22.0 (#4422)
  • change: build: add plumber workflow security check (#4406)
  • change: build: pin github actions to commit shas and declare workflow permissions (#4405)
  • change: ci: fail early when a release is already published (#4408)
  • change: ci: run the FreeBSD tests on GitHub Actions (#4432)
  • change: ci: upgrade GitHub Actions and pin GoReleaser (#4427)
  • change: ci: upload fuzz crashers as GitHub Actions artifacts (#4428)
  • change: dap: add types command to list program types (#4439)
  • change: debugger: close resumeNotify early with the halt command (#4425)
  • change: docs: use singular information in CLI help (#4437)
  • change: gobuild: keep -C first for test builds (#4444)
  • change: goversion: format versioned development builds correctly (#4445)
  • change: pkg/proc: defer pointer cast to syscall invoking function (#4414)
  • change: proc,service: emit events while calling DownloadLibraryDebugInfo (#4438)
  • change: proc,terminal,service: add timeout to expression evaluation (#4449)
  • …and 12 more

Architecture

  • Unchanged — 0 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

go-delve/delve was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit f7ca879159be4c20b82aefbefb3799fae2644037 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5f8d0eb43fd7.