Write debug output to console window
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.
IT Offers
More for Developers
Top Authors
- Voted: 13 times.
- Voted: 11 times.
- Voted: 11 times.
- Voted: 8 times.
- Voted: 8 times.
- Paul Kimmel 214 articles
- Zafir Anjum 120 articles
- 15Seconds.com 99 articles
- Tom Archer - MSFT 83 articles
- Jeffrey Juday 82 articles


All