Description
Errors in Go serve two main purposes: reporting problems to the user of the program, and reporting problems to the developer of the program. The user essentially never wants to see stack traces. For a developer, they can be helpful. Thus it is reasonable for developers to use packages like https://pkg.go.dev/github.com/go-errors/errors to collect developer errors--errors that the user is not expected to see.
That said, while developing a program, there are times when it is helpful for a user error to include a stack trace. For example, this is useful when some program bug is causing an unexpected user error. Getting a stack trace may help speed up debugging. This can also be useful when a user reports an inexplicable user error that is repeatable with proprietary user data; here again a stack trace may help the developer debug the problem.
Therefore, I propose a new GODEBUG
setting: GODEBUG=errstacktrace=1
. When this GODEBUG
entry is set in the environment, the errors.New
and fmt.Errorf
functions will change to incorporate a stack trace into the message. This stack trace will be part of the string returned by the Error
method (which will now be a lengthy, multi-line, string).
This will permit developers debugging an obscure but repeatable problem to set an environment variable to request a stack trace for the error that they are seeing.
We could also consider providing a simple mechanism for other error generation packages to check whether this GODEBUG
setting is turned on.
This was inspired by a comment by @fsaintjacques : #60873 (comment).
Metadata
Metadata
Assignees
Type
Projects
Status