WinDbg.
http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx
After installing
Place Windbg.exe in the PATH
Command Prompt -> windbg -I
to install it as the JIT Debugger
Start your application.
Run it till it breaks, at which time WinDbg will open and show the
CallStack and point of failure.
Mystery solved!
Go fix it!
[You can also just attach the executable to Windbg in first place.
Or if even more postmortum information is needed open the dump (.dmp)
file with WinDbg.]
External components are mapped through VB6Debug.dll and ntdll. So the
final point of failure is usually not the trouble, but
something else up the line.
If you are interested in quickly identifying trouble in a compiled
application (especially native code), don't have VC++, nor that
familiar with CodeView THEN, IHMO WinDbg is the ONLY way to go.
Attach, launch, run, bang!, a couple of clicks, and there you are ...
[
When trying to resolve problems in 'release' (non-debug compiled) code
there are major problems with the common workarounds.
1) If you add additional code (instrumentation) there is always the
possibility of nudging things around enough to mask something that
would other-wise occur if the additional code wasn't there.
2) You can spend a lot of time instrumenting a lot of code to just
catch the ONE place a problem MIGHT occur. you end up writing a lot of
code that will likely NEVER be necessary. A major waste of time and
effort.
3) Adding 'debug information' to a compiled program can also mask
problems, because it shuts downs optimization and eliminates any
re-ordering or re-structuring that may be occurring in release code.
It can even cause an invocation of different 3rd party interfaces.
Optimization, re-arrangement, and different components ARE the primary
reason release code fails and debug code does not.
WinDbg is your friend.
]
-ralph