printfデバッグは便利だが、コンソールを開かなければいけないという欠点がある。
デバッガに出力するならOutputDebugStringという関数があるが、書式指定が使えないので数字の出力には一手間かかる。
_RPT0 , _RPT1 , _RPT2 , _RPT3 , _RPT4
というデバッグ用のマクロがあり、これをつかえばprintfのように書けるのだが、引数の数が決まっていてやや不便。
https://msdn.microsoft.com/ja-jp/library/ms350217(v=vs.71).aspx
_RPTn使用例:
#include <crtdbg.h> void func(int input1,double input2) { _RPT2( _CRT_WARN, "func inputs = %d , %lf \n", input1, input2 ); }
printf(そして可変長引数)は危険なので、デバッグしようとしてバグを増やしてしまっては本末転倒と考えれば、この仕様は合理的だ。しかしそれでもprintf形式が恋しくなることがあるので、自作する。
自作DebugPrintf
void DebugPrintf(LPCTSTR pszFormat, ...) { va_list argp; TCHAR pszBuf[256]; va_start(argp, pszFormat); _vstprintf(pszBuf, pszFormat, argp); va_end(argp); OutputDebugString(pszBuf); }
可変長引数をとる関数を作りそれをそのまま_vstprintfへ流し、OutputDebugStringでデバッガへ出力。ここでは文字数の上限が256となっているが、リスクを承知でやっているのだからこの点は自己責任となる。