Environment: any MSVC
It’s very common that we have to test our program on another machine
where the Visual C++ IDE is not installed. So there will be no debug window for output.
Logging into a file or keep popping up MessageBoxs are not very practical ways.
An easy solution is to show the output strings in a console window.
Put the following code at the beginning of your app file or in a separate file.
#ifdef _DEBUG
FILE* __fStdOut = NULL;
HANDLE __hStdOut = NULL;
#endif// width and height is the size of console window, if you specify fname,
// the output will also be writton to this file. The file pointer is automatically closed
// when you close the app
void startConsoleWin(int width=80, int height=25, char* fname = NULL);void startConsoleWin(int width, int height, char* fname)
{
#ifdef _DEBUG
AllocConsole();
SetConsoleTitle(“Debug Window”);
__hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);COORD co = {width,height};
SetConsoleScreenBufferSize(__hStdOut, co);if(fname)
__fStdOut = fopen(fname, “w”);
#endif
}// Use wprintf like TRACE0, TRACE1, … (The arguments are the same as printf)
int wprintf(char *fmt, …)
{
#ifdef _DEBUG
char s[300];
va_list argptr;
int cnt;va_start(argptr, fmt);
cnt = vsprintf(s, fmt, argptr);
va_end(argptr);DWORD cCharsWritten;
if(__hStdOut)
WriteConsole(__hStdOut, s, strlen(s), &cCharsWritten, NULL);if(__fStdOut)
fprintf(__fStdOut, s);return(cnt);
#else
return 0;
#endif
}
In CWinApp::InitInstance() call startConsoleWin() and a console window will popup. Then use wprintf at
places where you used to use TRACE. The output strings will then appear in the console window.