Another alternative that you didn't mention is the use of the old fashioned wait windows throughout the code. Of course, if you did this, you may find that your code -- when paused at a critical juncture (such as the way it was in the debugger) -- may work fine.
I once had a pice of code once like this. I finally found that it would work if I added a statement such as
X=0
where x was not used anywhere within scope.