Windowsアプリをデバッグ中にデバッグ情報が欲しい場合が多々存在する.
メッセージボックスなどでは面倒で,しかもマルチスレッドのタイミングなどがとりづらかったりする.
以下の方法ではコンソール画面を生成して,そこにデバッグ情報を出力する.
HANDLE conOut;
// アプリ起動時
AllocConsole();
conOut = GetStdHandle(STD_OUTPUT_HANDLE);
// アプリ終了時
FreeConsole();
上記の手続きをふまえた上で,以下の関数を呼ぶ.
void dbgOut(TCHAR *szForm, ...)
{
DWORD iOut;
TCHAR szBuf[MAX_PATH + 1];
va_list args;
va_start(args, szForm);
iOut = wvsprintf(szBuf, szForm, args);
va_end(args);
WriteFile(conOut, szBuf, iOut, &iOut, 0);
}
使用例は以下.
dbgOut("Enter foo()!\n");
dbgOut("foo: %s, bar %X\n", foo, bar);
出力先のコンソールはconagent.exeが制御してる.
そのプロパティはconagent.pifで設定できる.
参照
コンソールの制御
デバッグトレース