Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dlsniper/debugger
Debugging helper for Go
https://github.com/dlsniper/debugger
debugger debugging go goland golang
Last synced: 24 days ago
JSON representation
Debugging helper for Go
- Host: GitHub
- URL: https://github.com/dlsniper/debugger
- Owner: dlsniper
- License: mit
- Created: 2020-02-21T11:27:51.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-04-28T20:54:21.000Z (over 4 years ago)
- Last Synced: 2024-10-14T15:34:44.746Z (about 1 month ago)
- Topics: debugger, debugging, go, goland, golang
- Language: Go
- Homepage:
- Size: 115 KB
- Stars: 64
- Watchers: 2
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Debugger Middleware
This package provides a debugging middleware for Go applications to enable
better display of goroutines in the debugger.It has nearly-zero performance penalty in production code when not actively used.
## How this looks like in the IDE
Below you can see how this feature looks like in GoLand IDE:
![Debugger labels in GoLand](debugger-labels.png "Debugger labels in GoLand")
## How to use
Include it in your application using one of the patterns below.
Then, compile the application with `-tags debugger`, e.g.
```shell script
go build -tags debugger
```More details on how to use this can be found in this blog post:
https://blog.jetbrains.com/go/2020/03/03/how-to-find-goroutines-during-debugging/### HTTP handlers
In your code, replace the HTTP handler with the `Middleware` function call.
Original:
```go
router.HandleFunc("/", homeHandler)
```Replacement:
```go
router.HandleFunc("/", debugger.Middleware(homeHandler, func(r *http.Request) []string {
return []string{
"path", r.RequestURI,
}
}))
```### Non-HTTP handlers
For normal functions/methods, you can use the `SetLabels` / `SetLabelsCtx` functions
to set the debugger labels.Original:
```go
func sum(a, b int) int {
return a+b
}
```Replacement:
```go
func sum(a, b int) int {
debugger.SetLabels(func() []string {
return []string{
"a", strconv.Itoa(a),
"b", strconv.Itoa(b),
}
})return a+b
}
```## Performance
You can asses the performance of this library by running the included benchmarks
in your environment.Here are the results from my own machine (Intel Core i7 6700HQ, 32GB RAM, Windows 10),
when running with a `-count=5` pass, averaged across runs.Go 1.13.8
Without labels:
Name
go 1.13.8
go 1.14 RC1
Execution count
Time
Execution count
Time
BenchmarkWorkerWithout-8
3255558
370 ns/op
3183910
368 ns/op
BenchmarkWorkerWithOne-8
25938
45698 ns/op
25643
46479 ns/op
BenchmarkWorkerWithThree-8
15656
78222 ns/op
19754
60131 ns/op
BenchmarkWorkerWithTen-8
5776
216798 ns/op
7322
171842 ns/op
BenchmarkWorkerWithConv-8
15374
79609 ns/op
19049
63818 ns/op
## License
This project is provided under the [MIT license](LICENSE).