-
Notifications
You must be signed in to change notification settings - Fork 223
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reporting Unrecovered Panics #968
Comments
Our current thinking to support this would be some sort of wrapper program. |
Hey @cleptric - yes, that makes a lot of sense and would work for us. When it's ready we'd like to build it from source, perhaps this wrapper would be included in this SDK repo? |
Yes, we'll add it to this repository. |
Problem Statement
The current SDK will not report a panic if it isn't caught in a recover. The following example does not report any errors to Sentry. Panics and unhandled crashes are arguably the highest value errors an SRE would want to monitor and alert on in a production environment.
By default, Go will print the panic trace to stderr before exiting, but there is no opportunity for another go routine to recover the panic before the process terminates (note the absence of "Main exiting" in the output below).
There are a whole host of reasons a go program could panic, from data races to nil pointer dereferences, and there does not seem to be a good way to enforce panic recovery in every single go routine a developer might add to the codebase.
Ouputs:
Solution Brainstorm
Triggering a core dump is one way to get around this problem and report the error to Sentry, however that has its own set of drawbacks:
Another option would be to take a config option in the SDK initialization that has a file path to stderr output for the process. Then on SDK startup, it could go through the stderr output and look for panic stack traces and report them to Sentry. Parsing logs for errors is messy, but given how Golang handles unrecovered panics there is really nothing that can be done with error handling post-panic and before process termination.
The text was updated successfully, but these errors were encountered: