picox  0.1
xdebug.h ファイル

デバッグログやassert等の定義 [詳解]

被依存関係図:

[ソースコード]

マクロ定義

log_levels

ログの色付けのグループです

ANSIカラー でログヘッダに色付けをし、ログレベルを視覚的に見やすくします。

#define X_LOG_LEVEL_ERR   (1) /* error */
 
#define X_LOG_LEVEL_WARN   (2) /* warning */
 
#define X_LOG_LEVEL_NOTI   (3) /* notice */
 
#define X_LOG_LEVEL_INFO   (4) /* infomation */
 
#define X_LOG_LEVEL_VERB   (5) /* verbose */
 
#define X_LOG_LEVEL   X_CONF_LOG_LEVEL
 
#define X_ANSI_COLOR_BLACK   "\x1b[1;30m"
 
#define X_ANSI_COLOR_RED   "\x1b[1;31m"
 
#define X_ANSI_COLOR_GREEN   "\x1b[1;32m"
 
#define X_ANSI_COLOR_YELLOW   "\x1b[1;33m"
 
#define X_ANSI_COLOR_BLUE   "\x1b[1;34m"
 
#define X_ANSI_COLOR_MAGENTA   "\x1b[1;35m"
 
#define X_ANSI_COLOR_CYAN   "\x1b[1;36m"
 
#define X_ANSI_COLOR_WHITE   "\x1b[1;37m"
 
#define X_ANSI_COLOR_RESET   "\x1b[0m"
 
#define X_COLOR_BLACK
 
#define X_COLOR_RED
 
#define X_COLOR_GREEN
 
#define X_COLOR_YELLOW
 
#define X_COLOR_BLUE
 
#define X_COLOR_MAGENTA
 
#define X_COLOR_CYAN
 
#define X_COLOR_WHITE
 
#define X_COLOR_RESET
 
log_macros

ログ出力マクロのグループです

X_LOG_XXX()は、printfライクなformat引数を受け付けますが、 X_LOG_XXX((tag, "i = %d",i));という風に、引数を2重で()する必要があります。

C99の可変長引数マクロを使えばこんな変な書き方をしないですむのですが、 このライブラリの対象にはC++03も含めており、C++03では可変長引数マクロは標準機 能ではありません。

たいていのコンパイラでは、標準ではなくとも可変長引数マクロをサポートしていま すが、規格に厳格なコンパイラでは使用できません。(例 Renesas C++ compiler)

#define X_LOG_VERB(args)    (void)0
 
#define X_LOG_HEXDUMP_VERB(args)   (void)0
 
#define X_LOG_INFO(args)    (void)0
 
#define X_LOG_HEXDUMP_INFO(args)   (void)0
 
#define X_LOG_NOTI(args)    (void)0
 
#define X_LOG_HEXDUMP_NOTI(args)   (void)0
 
#define X_LOG_WARN(args)    (void)0
 
#define X_LOG_HEXDUMP_WARN(args)   (void)0
 
#define X_LOG_ERR(args)    (void)0
 
#define X_LOG_HEXDUMP_ERR(args)   (void)0
 
assertions

assertマクロのグループです

#define X_DEFAULT_ASSERT(expr)    X_DEFAULT_ASSERT_MSG(expr, NULL)
 picoxデフォルトのアサートです
 
#define X_DEFAULT_ASSERT_MSG(expr, msg)    ((expr) ? (void)0 : x_assertion_failed(#expr, msg, X_FUNC, __FILE__, __LINE__))
 追加メッセージを指定可能なアサートです
 
#define X_ASSERT(expr)    X_DEFAULT_ASSERT(expr)
 
#define X_ASSERT_MSG(expr, msg)    X_DEFAULT_ASSERT_MSG(expr, msg)
 
#define X_ASSERT_SELF(expr)    (void)0
 クラス指向モジュールの第一引数のNULLチェック用アサートです
 
#define X_ASSERT_ARG(expr)    (void)0
 引数の範囲チェック等のためのアサートです
 
#define X_ASSERT_NULL(expr)    (void)0
 引数のNULLチェック用のアサートです
 
#define X_ASSERT_TAG(expr)    (void)0
 規定のタグがセットされているかの検査用アサートです
 
#define X_ASSERT_ENUM(expr)    (void)0
 不正な列挙値が指定されていないかの検査用アサートです
 
#define X_ASSERT_MALLOC_NULL(expr)    (void)0
 動的メモリ確保のNULL検査用アサートです
 
#define X_ABORT(msg)    X_ASSERT_MSG(0, msg)
 プログラムの実行を強制停止します
 
#define X_ABORT_DEFAULT   default: X_ABORT("Runtime error"); break
 switch文でdefaultの時にX_ABORT()を呼び出します
 
#define X_EXIT(return_code)    X_ABORT("exit:" #return_code)
 プログラムの実行を強制停止します
 
log_headers

ログヘッダ文字列のグループです

#define X_VERB_COLOR   ""
 
#define X_INFO_COLOR   X_COLOR_GREEN
 
#define X_NOTI_COLOR   X_COLOR_MAGENTA
 
#define X_WARN_COLOR   X_COLOR_YELLOW
 
#define X_ERR_COLOR   X_COLOR_RED
 
#define X_VERB_HEADER   X_VERB_COLOR X_CONF_VERB_HEADER X_COLOR_RESET
 
#define X_INFO_HEADER   X_INFO_COLOR X_CONF_INFO_HEADER X_COLOR_RESET
 
#define X_NOTI_HEADER   X_NOTI_COLOR X_CONF_NOTI_HEADER X_COLOR_RESET
 
#define X_WARN_HEADER   X_WARN_COLOR X_CONF_WARN_HEADER X_COLOR_RESET
 
#define X_ERR_HEADER   X_ERR_COLOR X_CONF_ERR_HEADER X_COLOR_RESET
 

型定義

typedef void(* XAssertionFailedFunc) (const char *expr, const char *msg, const char *func, const char *file, int line)
 アサーションに失敗した時に呼び出される関数のポインタ型です [詳解]
 

関数

void x_hexdump (const void *src, size_t len, size_t cols)
 
int x_set_log_level (int level)
 
log_functions

ログ出力関数のグループです

コンパイル時に除去できるように、これらの関数は直接呼び出さす、log_macrosのマ クロを使用してください。

void x_verb_printlog (const char *tag, const char *fmt,...)
 
void x_info_printlog (const char *tag, const char *fmt,...)
 
void x_noti_printlog (const char *tag, const char *fmt,...)
 
void x_warn_printlog (const char *tag, const char *fmt,...)
 
void x_err_printlog (const char *tag, const char *fmt,...)
 
void x_verb_hexdump (const char *tag, const void *src, size_t len, size_t cols, const char *fmt,...)
 
void x_info_hexdump (const char *tag, const void *src, size_t len, size_t cols, const char *fmt,...)
 
void x_noti_hexdump (const char *tag, const void *src, size_t len, size_t cols, const char *fmt,...)
 
void x_warn_hexdump (const char *tag, const void *src, size_t len, size_t cols, const char *fmt,...)
 
void x_err_hexdump (const char *tag, const void *src, size_t len, size_t cols, const char *fmt,...)
 

変数

XAssertionFailedFunc x_assertion_failed
 アサーション失敗時に呼びされる関数のポインタです [詳解]
 
XAssertionFailedFunc x_post_assertion_failed
 x_assertion_failedの呼び出し後に呼びされる関数のポインタです [詳解]
 
XAssertionFailedFunc x_pre_assertion_failed
 x_assertion_failedの呼び出し前に呼びされる関数のポインタです [詳解]
 

詳解

デバッグログやassert等の定義

著者
MaskedW