The Six Stages of Debugging (2012)
plasmasturm.org
plasmasturm.org
The door to which they were taped was in IL2 and belonged to Mike Engber. He says, "The version on my door now is nicely laminated."
The list itself was created be me some years prior when we worked on Newton, after a particularly frustrating DMA debug session.
2. I have no idea how this is supposed to work
3. Let's change some random thing that shouldn't be related at all
4. This works now, and I have no idea why
5. Pray to the gods of code that whatever it was that broke doesn't happen again
99 little bugs in the code, 99 little bugs. Take one down, patch it in Prod, 117 little bugs in the code. -Attributed to Kurt Cobain
A friend of mine in a compiler writing class produced a compiler with one error message “you lied to me when you told me this was a program”. —Pete Fenelon
... remote login to a windows 2003 server changes the default locale, breaking servers that depend on the default locale (which of course they shouldn't!). When this bit us, we were working on the server in a different room from a guy who was very occasionally logging in remotely, as I recall we only realised when he left his door open and we saw the two things happen at once.
My coworkers naturally doubted that I had found a compiler bug. Correspondence with the compiler's developer confirmed my initial finding. I was vindicated, and could prove I had caught one of the most reclusive bugs of them all.
Fast forward two years, and my coworker is having trouble with MSVC 6 (an old compiler, even at the time). The behaviour seems odd, and my mind jumps back to that one bug I found previously. We isolate it down to one line, and I state with confidence that the compiler generated incorrect code.
My coworker agreed at the time. But the next day, after re-reading the code, he pointed out that I had read it incorrectly. The compiler was doing exactly the right thing. To further my embarrassment, it wasn't even some obscure feature of C (like trigraphs). I made a common mistake and misunderstood basic pointer arithmetic. I still feel an urge to slam my head into my desk right now.
Morale of the story: compiler errors are rare. Really rare. I essentially caught bigfoot on my first hunting trip. Now I have to reassure myself I'm not seeing him again every time I'm confronted with a difficult debugging problem.
Or in technical terms, only declare you have found a compiler error if you have:
(1) read the generated assembly
(2) re-read the code several times alongside the relevant language specification
(3) developed a reproducible example
(4) formulated a plausible theory of what went wrong in the compiler, and contacted the vendor who has confirmed your suspicion
1. It's nobody's fault
2. It could be my fault
3. It's my own damn fault
7. Who wrote this crap?
8. Oh, I wrote this crap...