Visual Studio Bug – ‘if’ followed by a try / catch causes debugger stepping error

Yesterday I was debugging and stepped into a method. I wanted to get past my parameter validation checks and into the meat of the method, so I quickly, F10’d my way down the method, but I noticed a line of code was stepped on which should not have been touched. The code was a simple parameter validation like: 1 2 if (enumerableObj == null) throw new ArgumentNullException("enumerableObj");if (enumerableObj == null) throw new ArgumentNullException("enumerableObj"); with several similar parameter validation lines above it and a try/catch block containing the meat of the method below it. The odd thing was, I thought I saw the debugger step on the throw statement even though the enumerableObj should have had a value. I assumed I had somehow passed in a null value to the enumerableObj parameter and had nearly missed the problem in my haste. I had been moving quickly, so quickly in fact that I had stepped about 3 more lines into the method before I even stopped. To be honest at this point, I wasn’t even sure if I saw it step into the ‘if’ block, so I repositioned my debug cursor back to the ‘if’ condition, and stepped again. Sure enough, it stepped into the ‘if’ block. I assumed I passed in a null parameter, but when I evaluated enumerableObj, it was set, what’s more, evaluating the entire enumerableObj == null expression resulted in false, as expected. But why the heck was I being stepped into the ‘if’ block when the ‘if’ condition was false? I retried it again, just in case the enumerableObj had somehow been set as a result of a side effect somewhere, but even then, it still stepped into the ‘if’ block. So, I did the standard stuff; cleaned my solution, deleted my bin and obj directories, reopening the solution, restarted Visual Studio, & rebooted, all the while rebuilding and retesting the project with each change. Nothing seemed to work. I even cut & pasted my code into notepad, then cut & pasted from notepad back into Visual Studio to ensure there was no hidden characters in my files.* None of this worked, so I started commenting out code in the method, and eventually was able to isolate it to the above code failing if, and only if, it was followed by a try / catch block. Seriously! If the try / catch block was there, it would step onto the throw statement even though it should... read more

Workaround: Visual Studio Debugger will not step.

Often while I’m stepping through server side code, I’ll get the error message “Unable to step. The operation could not be completed. A retry should be performed.” Or the “Unable to step. The message filter indicated that the application is busy.” message. Once you’ve gotten either of these messages, neither F10 or F11 will work, you just keep getting the same message. Finding information on this problem has been elusive, but I finally found this blog post which confirms the problem I’ve always suspected, that it’s a race condition in the VS debugger which is triggered by pressing either F10 or F5 at the same time as a javascript event is triggered in IE. The blog post outlines 3 workarounds, none of which I care for, so I thought I’d share a little trick I’ve discovered which will usually allow you to get back on track and start debugging again. Here’s how I get the debugger back on track: Place a break point on the next line of code Press F5 When the break point is hit, F10 & F11 will work again Warning: There have been a few times when the debugger did not stop on my breakpoint, but for the most part, it stopped 99% of the time. I may have missed a distinction in those few... read more