sstd::pdbg

概要
  pdbg は,printf debugger を意味し,デバッグ用の関数群を提供します.#define DEBUG の有無により,動作を変更します.※この関数群は,"pdbg", "pdbg_if", "pdbg_if_exit", "pdbg_if_stop_exit", "dbg", "ndbg", "pdbg_always", "pdbg_always_stop_exit" をグローバルで定義 (#define) するため,名前空間を汚染します.これは,コンパイル前に sstd/compileOption.hpp 中の,#define use_sstd_pdbg を制御することで抑制できます.
プロトタイプ宣言動作説明
pdbg(...)print ... .
pdbg_if(Boolean, ...)If Boolean is true, print ... .
pdbg_if_exit(Boolean, ...)If Boolean is true, print ... and exit.
pdbg_if_stop_exit(Boolean, ...)If Boolean is true, print ... , stop and exit.
dbg(Code)If "DEBUG" is "#define"d, run "Code".
ndbg(Code)If "DEBUG" is not "#define"d, run "Code".
使用例
#define DEBUG
#include <sstd/sstd.hpp>

int main(){
    sstd::pdbg("abc\n");
    printf("true: "); sstd::pdbg_if(true, "print txt"); printf("\n");
    printf("false: "); sstd::pdbg_if(false, "not print txt"); printf("\n");
//  printf("true: "); sstd::pdbg_if_exit(true, "exit");
    printf("false: "); sstd::pdbg_if_exit(false, "not exit"); printf("\n");
//  printf("true: "); sstd::pdbg_if_stop_exit(true, "exit"); printf("\n");
//  printf("false: "); sstd::pdbg_if_stop_exit(false, "not exit"); printf("\n");
    sstd::dbg(printf("run debug code."););
    sstd::ndbg(printf("run ndebug code."););
    printf("\n");

    sstd::pdbg_always("%s\n", "always print message");
//  sstd::pdbg_always_stop_exit("%s\n", "always print message, stop and exit.");
    printf("\n");
}

実行結果
$ ./exe.exe
main(5): abc
true: main(6): print txt
false:
false:
run debug code.
main(16): always print message


//#define DEBUG
#include <sstd/sstd.hpp>

int main(){
    sstd::pdbg("abc\n");
    printf("true: "); sstd::pdbg_if(true, "print txt"); printf("\n");
    printf("false: "); sstd::pdbg_if(false, "not print txt"); printf("\n");
//  printf("true: "); sstd::pdbg_if_exit(true, "exit");
    printf("false: "); sstd::pdbg_if_exit(false, "not exit"); printf("\n");
//  printf("true: "); sstd::pdbg_if_stop_exit(true, "exit"); printf("\n");
//  printf("false: "); sstd::pdbg_if_stop_exit(false, "not exit"); printf("\n");
    sstd::dbg(printf("run debug code."););
    sstd::ndbg(printf("run ndebug code."););
    printf("\n");

    sstd::pdbg_always("%s\n", "always print message");
//  sstd::pdbg_always_stop_exit("%s\n", "always print message, stop and exit.");
    printf("\n");
}

実行結果
$ ./exe.exe
true:
false:
false:
run ndebug code.
main(16): always print message
実装

0 件のコメント:

コメントを投稿