スポンサーリンク

デバッガ用のprintf

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となっているが、リスクを承知でやっているのだからこの点は自己責任となる。

 

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: