Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
147 changes: 142 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,143 @@
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.

## [1.24.2] 2025-04-10

### Added

- Support for struct literals in expression evaluator (#3935, #3953, @aarzilli)
- Check to reject DWARFv5 executables if delve itself isn't built with 1.25 or later due to bugs in Go's standard library prior to 1.25 (#3943, #3961, @aarzilli)

### Fixed

- Support for macOS Sequoia 15.4 (#3966, @aarzilli)
- Race conditions with rr backend (#3971, #3973, #3963, @BronzeDeer, @aarzilli)
- Goroutine load with corrupted label maps (#3968, #3962, @hongyuh-hh)
- Breakpoint conditions on suspended breakpoints (#3938, @Lslightly)

### Changed

- Miscellaneous test and documentation fixes (#3979, #3952, #3954, #3955, #3951, @alexandear, @codesoap, @derekparker)

## [1.24.1] 2025-03-05

### Added

- Support for linux/loong64 in native backend (#3892, @yelvens)
- Support for watchpoints on interface values (#3922, #3924, @derekparker)
- Improved support for DWARFv5 (#3893, @aarzilli)
- Telemetry stack counters for internal errors (#3930, @aarzilli)
- Support for zed editor and allow args in DELVE_EDITOR (#3899, @derekparker)

### Fixed

- Fix uprobe address in ebpf implementation (#3894, @3u13r)
- Provide process events after launch in DAP (#3902, @shaunduncan)
- Use rr version to determine style of qRRCmd (#3921, @aarzilli)
- Better error message for breakpoints on stripped binaries (#3914, @aarzilli)
- Switch to goroutine stack if no progress on thread stack (#3898, @aarzilli)
- Handle wider registers in test (#3929, @derekparker)

### Changed

- Replace logrus with log/slog (#3918, @aarzilli)
- Remove uses of reflect.MethodByName from all of Delve (#3916, @aarzilli)
- Refactor sort.Sort to slices.SortFunc (#3880, @alexandear)
- Allow access to thread registers after a function call (#3908, @aarzilli)
- Remove riscv64 from TeamCity configuration (#3912, @aarzilli)

## [1.24.0] 2024-12-18

### Added

- Support for Go 1.24, particularly the new swiss table map implementation (#3882, #3879, #3838, @aarzilli)
- Import go telemetry and enable crash reporting (#3841, @hyangah)
- Enable stepping into coroutine (#3791, @aarzilli)
- Add raw examinemem dump (#3721, @aarzilli)
- Add linux-riscv64 support (experimental) (#3785, @lrzlin)
- Automatically guessing substitute-path config (#3781, @aarzilli)
- Print a message when the debuggee process exits while Delve in headless mode (#3870, @jakejx)
- Allow accessing closure captured variable as if they were struct fields (#3866, @aarzilli)
- Add dape to list of plugins (#3817, @jgarte)

### Fixed

- Fix step stuttering when entering range-over-func bodies (#3788, @aarzilli)
- Fix formatting of autogenerated documentation (#3836, @aarzilli)
- Fix issue on Windows when launching process while detached (#3867, @aarzilli)
- Fix handling of unsatisfiable breakpoints during restart (#3868, @aarzilli)

### Changed

- Update 'client-addr' to support Unix domain sockets (#3819, @n1lesh)
- Adds pointer pinning to call injection, improving function calls during debug session (#3787, @aarzilli)
- Allow modification of starlark structs returned by API (#3872, @aarzilli)
- API V1 has been removed following the deprecation from last version (#3881, @aarzilli)

## [1.23.1] 2024-09-23

Telemetry notice: starting with version 1.24.0 Delve will begin collecting opt-in telemetry data using the same mechanism used by the toolchain, see <https://github.com/golang/go/issues/68384>, <https://go.dev/doc/telemetry#background>, <https://github.com/go-delve/delve/issues/3815>.

### Fixed

- Debugging on macOS Sequoia (#3799, @aarzilli)
- Various bugs with range-over-func loops (#3808, #3788, @aarzilli)
- Reslice operator did not allow reslicing up to the slice's cap (#3796, @Jille)
- Starlark access to named constants (#3802, @arvidfm)


## [1.23.0] 2024-07-16

Deprecation notice: starting with the next version of Delve version 1 of the API will be removed. Version 2 was added in version 0.12.0 in 2017 and has been the recommended way to connect to Delve since.

### Added

- Support for Go 1.23, particularly the new range-over-func statement (#3663, #3697, #3736, #3738, #3750, #3755, #3763, #3778, @aarzilli)
- `next-instruction` command (#3671, @derekparker)
- Support reading captured variables of closure functions (#3682, @aarzilli)
- Breakpoint command `break` now allows adding a condition the a breakpoint with a postfix notation (`break <name> <locspec> if <condition>`) (#3693, #3702, @derekparker)
- When the `step` command is executed on `go funccall()` statements it will stop on the newly created goroutine (#3686, @aarzilli)
- Invocation of [rr](https://github.com/rr-debugger/rr/) when it is used as a backend can be now controlled with environment variables `$DELVE_RR_RECORD_FLAGS` and `$DELVE_RR_REPLAY_FLAGS` (#3726, @aarzilli)
- Added new suboption `--follow-calls` to trace command (#3594, @archanaravindar)

### Fixed

- Better behavior on stripped files (#3678, #3695, @aarzilli, @derekparker)
- Support rr version 5.7.0 and later (#3705, #3718, @howardjohn, @aarzilli)
- Watchpoints on newer versions of macOS (#3703, @derekparker)
- Bug related to watchpoints going out of scope (#3742, @aarzilli)
- Bug invoking debuginfod-find (#3762, @derekparker)
- Miscellaneus fixes (#3707, #3761, #3759, #3767, @scop, @jayantxie, @aarzilli, @zdyj3170101136)

### Changed

- Improved auto-completions for shells (#3696, #3699, @scop)
- Print more informations on tracepoint stops (#3675, #3712, @derekparker, @archanaravindar)
- Improved performance of the default macOS backend (#3715, @derekparker)
- When a breakpoint is hit on a headless instance of Delve while no clients are connected a message will be printed to stdout (#3632,#3747, @fatanugraha, @aarzilli)
- Miscellaneous code and documentation improvements (#3676, #3677, #3698, #3716, #3727, #3722, #3730, #3731, #3753, #3752, #3756, #3757, #3741, #3773, #3775, #3770, #3769, #3772, #3779, #3774, @alexandear, @aarzilli, @abbasudo, @jayantxie)

## [1.22.1] 2024-02-21

### Added

- `--listen` and `connect` now support Unix Domain Sockets (#3655, ##3658, @aarzilli)
- Paging for commands `print`, `vars`, `args` and `locals` (#3620, @aarzilli)
- Syntax highlighting for stacktraces and options to change the color of Delve's prompt (#3649, #3648, @aarzilli)
- Wait-for option for DAP's attach mode (#3656, @muggle-nil)

### Fixed

- Bug where Ctrl-Z was not sent to other processes in the same group as Delve (#3619, @aarzilli)
- Parsing of `/proc/net/tcp` when it has 10000 or more entries (#3660, @michaelmerg)
- Rare error when valuating expressions containing `runtime.frame(n)` inside breakpoint conditions (#3624, @aarzilli)
- Line number reported for the stack frame that caused a panic (#3638, @aarzilli)
- Building when dlv's executable already exists on macOS with a signing key already installed (#3639, @ardnew)

### Changed

- When evaluating an expression containing a reslice operation with constant bounds the entire resulting slice will be loaded (#3623, @aarzilli)

## [1.22.0] 2023-12-29

### Added
Expand All @@ -25,7 +162,7 @@ This project adheres to Semantic Versioning.
### Changed

- Type casts from slice to string and vice versa will now use the load configuration for the target type, which is more intuitive (#3596, @aarzilli)
- Miscellaneous impreovements to documentation (#3531, #3555, #3556, #3562, #3564, #3575, #3576, @alexandear, @testwill)
- Miscellaneous improvements to documentation (#3531, #3555, #3556, #3562, #3564, #3575, #3576, @alexandear, @testwill)

## [1.21.2] 2023-10-30

Expand Down Expand Up @@ -186,7 +323,7 @@ This project adheres to Semantic Versioning.
- Add support for empty string in substitutePath (@RuijieC-dev)
- Support gnu_debuglink section (@aarzilli)
- Support exact matches in SubstitutePath (@eandre)
- Add ability to show disassembly instead of source code (@aazilli)
- Add ability to show disassembly instead of source code (@aarzilli)
- Add -per-g-hitcount to breakpoint conditions (@yangxikun)

### Fixed
Expand All @@ -197,7 +334,7 @@ This project adheres to Semantic Versioning.
- Do not panic reading bad G struct (@aarzilli)
- Fix parsing DWARFv5 file table (@derekparker)
- Improve trace subcommand output (@derekparker)
- Fix documentation for examinemem (@aaarzilli)
- Fix documentation for examinemem (@aarzilli)
- Fix step instruction on 1 byte instruction with software breakpoint (@qmuntal)
- Fix handling of function entry / return in ebpf tracing backend (@derekparker)
- Fix size of ebpf type for fn_addr (@derekparker)
Expand Down Expand Up @@ -368,7 +505,7 @@ This project adheres to Semantic Versioning.
### Fixed

* Correctly check for 1.17 and regabi (@aarzilli)
* Print config output strings quouted (@aarzilli, @krobelus)
* Print config output strings quoted (@aarzilli, @krobelus)
* Update check for system goroutines (@suzmue)
* DAP: Halt before detach in Stop (@polinasok)
* DAP: Do not send halt request if debuggee is not running (@suzmue)
Expand Down Expand Up @@ -672,7 +809,7 @@ This project adheres to Semantic Versioning.
- Ability to read goroutine ancestors if they are enabled by passing `GODEBUG="tracebackancestors=N"` (requires Go >= 1.11) (#1514, #1570, @aarzilli)
- Breakpoint autocompletion for the command line client (#1612, @qingyunha)
- Added reverse step-instruction command for rr backend (#1596, @dpapastamos)
- Support debugging programs using plugins on Linux with Go 1.12 or later (#1413, #1414, @aarzilli)
- Support debugging programs using plugins on Linux with Go 1.12 or later (#1413, #1414, @aarzilli)
- Improved function call injection (#1503, #1504, #1548, #1591, #1602, @aarzilli)
- New variable flag to mark variables that have a fake or no-longer-valid address, because they are either stored in registers or in a stack frame that has been removed from the stack (#1619, @aarzilli)
- Support relative file paths when specifying breakpoint locations (#1478, @chainhelen)
Expand Down
1 change: 1 addition & 0 deletions Documentation/EditorIntegration.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ The following editor plugins for delve are available:
**Emacs**
* [Emacs plugin](https://github.com/benma/go-dlv.el/)
* [dap-mode](https://github.com/emacs-lsp/dap-mode#go-1)
* [dape](https://github.com/svaante/dape?tab=readme-ov-file#go---dlv)

**Goland**
* [JetBrains Goland](https://www.jetbrains.com/go)
Expand Down
10 changes: 5 additions & 5 deletions Documentation/api/ClientHowto.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Command line arguments that should be handed to the inferior process should be s
dlv exec --headless ./somebinary -- these arguments are for the inferior process
```

Specifying a static port number, like in the [README](//github.com/go-delve/Delve/tree/master/Documentation/README.md) example, can be done using `--listen=127.0.0.1:portnumber`.
Specifying a static port number, like in the [README](//github.com/go-delve/delve/tree/master/Documentation/README.md) example, can be done using `--listen=127.0.0.1:portnumber`.

This will, however, cause problems if you actually spawn multiple instances of the debugger.

Expand All @@ -39,11 +39,11 @@ The `--log-dest` option can be used to redirect the "API server listening at:" m

Once you have a running headless instance you can connect to it and start sending commands. Delve's protocol is built on top of the [JSON-RPC 1.0 specification](https://www.jsonrpc.org/specification_v1).

The methods of a `service/rpc2.RPCServer` are exposed through this connection, to find out which requests you can send see the documentation of RPCServer on [godoc](https://godoc.org/github.com/go-delve/Delve/service/rpc2#RPCServer).
The methods of a `service/rpc2.RPCServer` are exposed through this connection, to find out which requests you can send see the documentation of RPCServer on [Go Reference](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer).

### Example

Let's say you are trying to create a breakpoint. By looking at [godoc](https://godoc.org/github.com/go-delve/Delve/service/rpc2#RPCServer) you'll find that there is a `CreateBreakpoint` method in `RPCServer`.
Let's say you are trying to create a breakpoint. By looking at [Go Reference](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer) you'll find that there is a `CreateBreakpoint` method in `RPCServer`.

This method, like all other methods of RPCServer that you can call through the API, has two arguments: `args` and `out`: `args` contains all the input arguments of `CreateBreakpoint`, while `out` is what `CreateBreakpoint` will return to you.

Expand Down Expand Up @@ -190,7 +190,7 @@ If you want to let your users specify a breakpoint on a function selected
from a list of all functions you should specify the name of the function in
the FunctionName field of Breakpoint.

If you want to support the [same language as dlv's break and trace commands](//github.com/go-delve/Delve/tree/master/Documentation/cli/locspec.md)
If you want to support the [same language as dlv's break and trace commands](//github.com/go-delve/delve/tree/master/Documentation/cli/locspec.md)
you should call RPCServer.FindLocation and
then use the returned slice of Location objects to create Breakpoints to
pass to CreateBreakpoint: just fill each Breakpoint.Addr with the
Expand Down Expand Up @@ -244,7 +244,7 @@ are interested in the topmost stack frame of the current goroutine (or
thread) use: `EvalScope{ GoroutineID: -1, Frame: 0 }`.

More information on the expression language interpreted by RPCServer.Eval
can be found [here](//github.com/go-delve/Delve/tree/master/Documentation/cli/expr.md).
can be found [here](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md).

### Variable shadowing

Expand Down
5 changes: 2 additions & 3 deletions Documentation/api/json-rpc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ Note that this JSON-RPC interface is served over a streaming socket, *not* over

# API versions

Delve currently supports two versions of its API. By default a headless instance of `dlv` will serve APIv1 for backward compatibility with old clients, however new clients should use APIv2 as new features will only be made available through version 2. To select APIv2 use `--api-version=2` command line argument.
Clients can also select APIv2 by sending a [SetApiVersion](https://godoc.org/github.com/go-delve/delve/service/rpccommon#RPCServer.SetApiVersion) request specifying `APIVersion = 2` after connecting to the headless instance.
Delve currently only supports v2 of its API. Support for v1 was dropped in version v1.24.0 of Delve.

# API version 2 documentation

All the methods of the type `service/rpc2.RPCServer` can be called using JSON-RPC, the documentation for these calls is [available on godoc](https://godoc.org/github.com/go-delve/delve/service/rpc2#RPCServer).
All the methods of the type `service/rpc2.RPCServer` can be called using JSON-RPC, the documentation for these calls is [available on godoc](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer).

Note that all exposed methods take one single input parameter (usually called `args`) of a struct type and also return a result of a struct type. Also note that the method name should be prefixed with `RPCServer.` in JSON-RPC.

Expand Down
31 changes: 23 additions & 8 deletions Documentation/backend_test_health.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
Tests skipped by each supported backend:

* 386 skipped = 7
* 386 skipped = 11
* 1 broken
* 3 broken - cgo stacktraces
* 3 not implemented
* 6 not implemented
* 1 not working due to optimizations
* arm64 skipped = 1
* 1 broken - global variable symbolication
* darwin skipped = 3
Expand All @@ -13,32 +14,46 @@ Tests skipped by each supported backend:
* 1 broken - cgo stacktraces
* darwin/lldb skipped = 1
* 1 upstream issue
* freebsd skipped = 10
* freebsd skipped = 13
* 2 flaky
* 2 follow exec not implemented on freebsd
* 4 not implemented
* 7 not implemented
* 2 not working on freebsd
* linux/386 skipped = 2
* 2 not working on linux/386
* linux/386/pie skipped = 1
* 1 broken
* linux/loong64 skipped = 2
* 1 broken - cgo stacktraces
* 1 not working on linux/loong64
* linux/ppc64le skipped = 3
* 1 broken - cgo stacktraces
* 2 not working on linux/ppc64le when -gcflags=-N -l is passed
* linux/ppc64le/native skipped = 1
* 1 broken in linux ppc64le
* linux/ppc64le/native/pie skipped = 3
* 3 broken - pie mode
* linux/riscv64 skipped = 2
* 1 broken - cgo stacktraces
* 1 not working on linux/riscv64
* loong64 skipped = 9
* 2 broken
* 1 broken - global variable symbolication
* 6 not implemented
* pie skipped = 2
* 2 upstream issue - https://github.com/golang/go/issues/29322
* ppc64le skipped = 11
* ppc64le skipped = 14
* 6 broken
* 1 broken - global variable symbolication
* 4 not implemented
* windows skipped = 6
* 7 not implemented
* riscv64 skipped = 8
* 2 broken
* 1 broken - global variable symbolication
* 5 not implemented
* windows skipped = 9
* 1 broken
* 2 not working on windows
* 3 see https://github.com/go-delve/delve/issues/2768
* 6 see https://github.com/go-delve/delve/issues/2768
* windows/arm64 skipped = 5
* 3 broken
* 1 broken - cgo stacktraces
Expand Down
Loading
Loading