"This stack trace would be so much easier to debug if I knew what the value of that variable was" - said us, many many times. We finally scratched our own itch and built this into Rollbar.
It's really awesome. Take for example a bug I ran into with our new deploy emails feature:
"Hmmm, sure would be nice if I knew which variable was
the past, I would've had to reproduce locally, or add an additional
log each variable in production. But now I can just press "locals" for the stack frame and see it
prev_deploy." That was all I needed:
prev_deploy will be
deploy is the
very first deploy in this project. Easy two-line fix. Time taken from opening the Rollbar
notification to committing the fix: 2 minutes. Rollbarred!
How it works
We've implemented this in Python (pyrollbar), and are actively exploring other languages. Ruby and PHP are looking promising. Here's how it works in Python.
When this feature is enabled and an exception is reported, we use the inspect module to collect:
- all stack frames: names and values of all variables that are function arguments
- in-project stack frames: names and values of all local variables
There are two main edge cases to deal with:
- The variable could contain sensitive data. To deal with this, we use the same
scrub_fieldsconfiguration used for scrubbing request data. If the variable name matches one of the field names to be scrubbed, the variable's value will be scrubbed. (Like
access_tokenin the screenshot above.)
- The variable could contain a circular reference, be extremely large, or otherwise hard to serialize. To deal with this, we use the repr module to safely convert the value to a string of reasonable length. We've been using this internally now in production for the past two weeks without issue.
How to Enable
If you're using Python, simply update to pyrollbar 0.8.0 or greater. Local variables are on by default; see the docs for the full config reference.
If you're using Erlang, you're in luck - erollbar already sends argument values. Check its docs for details.
Want this in a different language? Let us know -- email firstname.lastname@example.org or open an issue on the GitHub repo for the appropriate Rollbar library.
Don't use Rollbar yet? Sign up for a free account, follow the setup instructions, and you'll be debugging production in power mode in no time.