Parses panic stack traces, densifies and deduplicates goroutines with similar stack traces. Helps debugging crashes and deadlocks in heavily parallelized process.
panicparse helps make sense of Go crash dumps:
See v2.0.1 blog post.
go get github.com/maruel/panicparse/v2/cmd/pp
go test -v |&pp
Windows or macOS native bash (which is 3.2.57): They don't have this shortcut, so use the long form:
go test -v 2>&1 | pp
&| redirects stderr and stdout. It's an alias for
go test -v &| pp
PowerShell: It has broken
2>&1 redirection. The workaround is to shell out to cmd.exe. :(
On POSIX, use
Ctrl-\ to send SIGQUIT to your process,
pp will ignore
the signal and will parse the stack trace.
To dump to a file then parse, pass the file path of a stack trace
go test 2> stack.txt pp stack.txt
Starting with go1.11, the toolchain starts to inline more often. This causes traces to be less informative. Starting with go1.17, optimization also interfere with traces. You can use the following to help diagnosing issues:
go install -gcflags '-N -l' path/to/foo foo |& pp
go test -gcflags '-N -l' ./... |& pp
go tool compile -help to get the full list of valid values for -gcflags.
Starting with Go 1.6,
single instead of
1 that was used in 1.5 and before. To get all
goroutines trace and not just the crashing one, set the environment variable:
set GOTRACEBACK=all on Windows. Probably worth to put it in your
If you try
pp for the first time and you get:
Creating tables and indexes... Done.
/usr/bin/pp5.18: No input files specified
you may be running the Perl PAR Packager instead of panicparse.
You have two choices, either you put
$GOPATH/bin at the beginning of
or use long name
go get github.com/maruel/panicparse/v2
panicparse instead of
go test 2> panicparse