概要

  • デバッグビルドにおいてデバッガの出力ウィンドウへ指定したエラーレベル以下のメッセージを出力する。

ソース

DebugLog.h

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
	@file DebugLog.h
 
	Win32アプリケーションのデバッグ方法<br>
	http://www.nitoyon.com/vc/tutorial/debug/win32.htm
 
	安全なデバッグマクロ定義に関する考察<br>
	http://inside.ascade.co.jp/node/56
	
	こんなんが欲しかった!? - かおるんダイアリー<br>
	http://d.hatena.ne.jp/kaorun55/20080210/1202655803
 
	Variadic マクロ<br>
	http://msdn.microsoft.com/ja-jp/library/ms177415.aspx
*/
#pragma once
 
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
 
enum {
    DebugLevel_None = 0,    ///< デバッグ出力無効
    DebugLevel_Error,        ///< エラーレベル
    DebugLevel_Warning,        ///< 警告レベル
    DebugLevel_Infomation,    ///< 情報レベル
    DebugLevel_DetailInfo,    ///< 詳細情報レベル
};
 
extern int DebugLevel;
 
#if defined(_DEBUG) || defined(DEBUG)
    /**
		printf と同様にデバッグ出力する。
	*/
    #define DEBUG_TRACE(level, ...)    \
        (((level) <= DebugLevel) ? ((MyOutputDebugString(__VA_ARGS__)), 0) : 0)
    /**
		buffer から length バイトを16進ダンプする。
	*/
    #define DEBUG_DUMP(level, buffer, length)    \
        (((level) <= DebugLevel) ? ((DebugDump(buffer, length)), 0) : 0)
#else
    /**
		printf と同様にデバッグ出力する。
	*/
    #define DEBUG_TRACE(level, ...)
    /**
		buffer から length バイトを16進ダンプする。
	*/
    #define DEBUG_DUMP(level, buffer, length)
#endif
 
#define    DEBUG_FUNC_NAME(level)    \
    DEBUG_TRACE( level, _T("%s: %08x\n"), _T(__FUNCSIG__), this );
 
/**
	printf と同様にデバッグ出力する。
*/
void MyOutputDebugString( LPCTSTR pszFormat, ...);
 
/**
	buffer から length バイトを16進ダンプする。
*/
void DebugDump(
    char *buffer,    ///< [in] ダンプする先頭アドレス
    int length        ///< [in] ダンプする長さ
);

DebugLog.cpp

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 
 
 
 
 
-
|
|
|
|
|
|
!
 
 
 
 
 
 
-
|
-
|
!
|
-
|
-
|
!
|
!
!
#include "StdAfx.h"
#include "DebugLog.h"
 
int DebugLevel = DebugLevel_Infomation;
 
void MyOutputDebugString( LPCTSTR pszFormat, ...)
{
    va_list    argp;
    _TCHAR pszBuf[MAX_PATH];
    va_start(argp, pszFormat);
    _vstprintf_s(pszBuf, pszFormat, argp);
    va_end(argp);
    OutputDebugString(pszBuf);
}
 
#define    DUMP_UNIT    (16)
 
void DebugDump(
    char *buffer,
    int length
){
    MyOutputDebugString(_T("%08x:"), buffer);
    for( int h=0; h<DUMP_UNIT; ++h){
        MyOutputDebugString(L" -%1x", h);
    }
    MyOutputDebugString(_T("\n"));
    for( int h=0; h<length; h+=DUMP_UNIT ){
        MyOutputDebugString(_T("%08x:"), h);
        for( int l=0; l<DUMP_UNIT && h+l<length; ++l ){
            MyOutputDebugString(_T(" %02x"), (unsigned char)buffer[h+l]);
        }
        MyOutputDebugString(_T("\n"));
    }
}

添付ファイル: fileDebugLog.zip 219件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 03 Feb 2014 20:48:21 JST (1626d)