2012年3月2日金曜日

デバッグ表示

息抜き。
streamもいいけどAndroidのアレも結構好きなんだよなぁということで。
本来は第一引数がタグ指定だけど__FUNCTION__を使ってみたかっただけ。

// *.h
#if defined(LOG_ENABLE) && defined(LOG_E_ENABLE)
#define Log_e(fmt, ...) \
  log_fprint(stderr, "E/" ## __FUNCTION__, __FILE__, __LINE__, fmt, ## __VA_ARGS__)
#else
#define Log_e(fmt, ...) (void)0
#endif // defined(LOG_ENABLE) && defined(LOG_E_ENABLE)

// *.cpp
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

static char _buff[512];
static char _filename[256];
static char _ext[5];

void log_fprint(FILE* file, const char* func, const char* filename, int line, const char* format, ...){
  // Windowsの__FILE__はフルパスらしい
  _splitpath_s(filename, NULL, 0, NULL, 0, _filename, sizeof(_filename), _ext, sizeof(_ext));
  va_list args;
  va_start(args, format);
  sprintf_s(_buff, sizeof(_buff), "%s %s%s(%6d): %s", func, _filename, _ext, line, format);
  vfprintf_s(file, _buff, args);
  va_end(args);
}

使い方は下記のような感じ。

  Log_e("hogehoge\n");
  Log_e("hoge %s bar = %d\n", "foo", 10);

コンソールへの出力イメージ。
main関数内の該当行から呼び出しただけなので有り難味が・・・。

ソースはこちら

0 件のコメント :

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。