Is it that you break point is holding things up long enough for some precondition to happen?
Is it that it work when you switch active windows to the debbuger?
Are you sure your running the same binaries each time? in this situation I sometimes delete all occurances of my dlls/exe then rebuild and run
If you are running release or debug Could this be the reason:
One common problem is when you build release you can get a different value in variables that are not initialised e.g. the following will behave differently
BOOL myBool
if (myBool)
else
void* pMyPointer
if (pMyPointer)
else
The reason for this is that the debugger zeros memory, in release mode the memory contains previous data this is why it is important to inialise varables
e.g.
BOOL myBool = FALSE;
pMyPointer = nullptr;