ID Number: Q68825
3.00
WINDOWS
Summary:
If an application causes an unrecoverable application error (UAE), and
this behavior is not duplicated when the application runs under
CodeView for Windows (CVW), it can be very difficult to isolate the
problem.
If a debugging terminal is available, a call to OutputDebugString()
will put a message on the terminal. However, if no additional hardware
is in place, the application can leave data regarding its path of
execution by calling WriteProfileString() to modify the WIN.INI file.
More Information:
Consider the following code fragment:
case WM_MOUSEMOVE:
WriteProfileString ("TestApp", "Debug", "Entering WM_MOUSEMOVE");
MousePos[iGlobalIndex] = lParam;
WriteProfileString ("TestApp", "Debug", NULL);
break;
Assume that it is unclear whether the UAE happens in this code (for
example, if iGlobalIndex takes on an invalid value). This has not
occurred when running in the CVW debugger, or it takes so long to
reproduce under CVW that the debugger is not useful.
The next time the UAE occurs, if the [TestApp] section of the WIN.INI
file has the following line
Debug=Entering WM_MOUSEMOVE
the UAE occurred in the bracketed code. Otherwise, the line would be
deleted from WIN.INI. This evidence would be helpful in tracking and
correcting the bug.
In this particular case, the performance hit can be quite severe
because the WM_MOUSEMOVE message is sent quite often and updating
WIN.INI requires a write to the disk. However, by testing an
appropriate, but less common, message (such as WM_LBUTTON*) first, the
worst case slowdown shown in the example above can be avoided.