panicparse helps make sense of Go crash dumps:
See v2.0.1 blog post.
panicparse was created with ❤️️ and passion by Marc-Antoine Ruel and friends.
go get github.com/maruel/panicparse/v2/cmd/pp
pp streams its stdin to stdout as long as it doesn‘t detect any panic.
panic() and Go’s native deadlock detector print to stderr via the native
Bash v4 or zsh:
|& tells the shell to redirect stderr to stdout, it's an alias for
2>&1 | (bash v4, zsh):
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
Fish: It uses ^ for stderr redirection so the shortcut is
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. You can use the following to help diagnosing issues:
go install -gcflags '-l' path/to/foo foo |& pp
go test -gcflags '-l' ./... |& pp
Starting with Go 1.6,
GOTRACEBACK defaults to
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
Install bash v4+ on macOS via homebrew or macports. Your future self will appreciate having done that.
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
$PATH or use long name
go get github.com/maruel/panicparse/v2
panicparse instead of
go test 2> panicparse