3.0 KiB
3.0 KiB
Diagnostic Tools
Runtime Diagnostics (GODEBUG)
Go documentation command
Use go doc, not go tool doc. Go 1.26 removed the old cmd/doc / go tool doc path.
GC Tracing
GODEBUG=gctrace=1 ./app
Output:
gc 123 @45.67s 4%: 0.8+10+0.3 ms clock, 6+5/10/0 ms cpu, 512->300->150 MB
| Field | Meaning |
|---|---|
| 4% | GC CPU overhead (if >10%, over-allocating) |
| 512->300->150 MB | Heap at GC start -> heap at GC end -> live heap |
| Large pause | Allocation storm |
Scheduler Tracing
GODEBUG=schedtrace=1000,scheddetail=1 ./app
| Signal | Meaning |
|---|---|
| runqueue high | CPU saturation, goroutines waiting |
| idleprocs=0 | Fully busy, at capacity |
| spinningthreads | Lock contention |
| threads > gomaxprocs | Blocking syscalls |
GOTRACEBACK
Get full stack traces on panic:
GOTRACEBACK=all ./app
| Level | Shows |
|---|---|
none |
No stack traces |
single |
Current goroutine only (default) |
all |
All goroutines (useful for deadlocks) |
system |
All goroutines + runtime frames |
Delve Debugger
Installation
go install github.com/go-delve/delve/cmd/dlv@latest
Basic Usage
dlv debug ./cmd/myapp # debug a program
dlv test ./mypackage # debug a test
dlv attach 12345 # attach to running process
dlv exec ./myapp -- --flag=v # execute binary with args
Common Commands
break main.main # set breakpoint
break file.go:42 # break at line
continue # continue execution
next # step over (n)
step # step into (s)
stepout # step out
print variable # print variable
locals # print all locals
args # print function arguments
goroutines # list all goroutines
goroutine 5 # switch to goroutine 5
stack # show stack trace
IDE Integration
VS Code:
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"env": { "GOTRACEBACK": "all" }
}
]
}
GoLand: Run -> Edit Configurations -> Go Build. Click gutter to set breakpoints. Use Debugger tab.
Advanced Analysis
→ See samber/cc-skills-golang@golang-benchmark skill (compiler-analysis.md) for detailed guides on escape analysis interpretation, assembly inspection, and compiler diagnostics (SSA dump, inlining decisions). See also trace.md for execution tracer analysis.