Blog |

Local variable values in stack traces

Local variable values in stack traces
Table of Contents

"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 None--is it prev_deploy or deploy?" In
the past, I would've had to reproduce locally, or add an additional rollbar.report_message() to
log each variable in production. But now I can just press "locals" for the stack frame and see it
instantly:

"OK, it's prev_deploy." That was all I needed: prev_deploy will be None when 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:

  1. The variable could contain sensitive data. To deal with this, we use the same scrub_fields
    configuration 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_token in the screenshot above.)
  2. 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 [email protected] 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.