Retail debugging is one of those things that is both painful and necessary. To avoid repeating myself, I will just point to my old blog entry on this subject -- http://blogs.msdn.com/greggm/archive/2004/12/15/315673.aspx.

I was doing some retail debugging today, and realized that I forgot to mention one good technique for solving retail only bugs – disable optimizations for the interesting code. Lots of bugs go away when everything is compiled /Od, but often you can disable optimizations in a function or two without destroying your repro.

#pragma warning(push)

#pragma warning(disable:4748) // Disable warning about /GS being disabled due to optimizations being disabled

#pragma optimize("", off)

HRESULT MyClass::MyFunction()

{

...

}

#pragma optimize("", on)

#pragma warning(pop)