I was debugging a threading bug and something truly bizarre happened to me: I was printing variables and when I went back to re-print a variable, it had changed on me! This was without actually ever running the program.
As far as I can tell, this is what happened:
- The variable I was printing was subject to writes in a race condition - some other thread was splatting it.
- After printing the variable, I printed some pieces of an STL container, which had to execute code in the attached process, which temporarily released all threads.
- Thus when I turn around, the program has been running.
In some ways, it was a really lucky find...after scratching my head and going "it's 2:30 AM and I've been drinking...that didn't just happen" I realized that the variable in question was being passed into the function by reference and thus might be secretly global (which was of course the real bug). Had I not seen the reference var get splatted under my nose it would have taken a lot more printing to find the problem.
No comments:
Post a Comment