zoukankan      html  css  js  c++  java
  • 调试宏定义和正则表达式批量添加打印桩

    调试宏

    #include <stdio.h>
    
    #define GW_DEBUG 1                    //打印开关
    #define GW_DEBUG_LEVEL    E_GW_INFO   //打印级别
    
    #if GW_DEBUG
    #define GW_LOG_FILE    ("/var/tmp/log")
    
    enum E_GW_DEBUG_LEVEL
    {
        E_GW_FATAL,
        E_GW_ERR, 
        E_GW_WARNING,
        E_GW_INFO,
        E_GW_NONE,
        E_GW_CNT
    };
    enum E_GW_MODULE
    {
        E_GW_MOD_MAIN,
        E_GW_MOD_NETCLIENT,
        E_GW_MOD_MOTIONDETECT,
        E_GW_MOD_OSD,
        E_gW_MOD_POS,
        E_GW_MOD_SPIT,
        E_GW_MOD_TTF,
        E_GW_MOD_RECORD,
        E_GW_MOD_FACE,
        E_GW_MOD_DFT,
        E_GW_MOD,CNT,
    };
    
    typedef struct _ST_GW_DEBUG_MOD
    {
        const char* pkMod;
        const bool bFlag;
    } ST_GW_DEBUG_MOD;
    
    static uint32_t gw_ms_rcd = 0;
    const char* const gw_debug_level_str[E_GW_CNT] = 
    {
      "FATAL", 
      "ERROR", 
      "WARNING", 
      "INFO", 
      "NONE"
    };
    const ST_GW_DEBUG_MOD gw_debug_ModSet[E_GW_MOD_CNT] = 
    {
        {"MAIN",         false},
        {"NETCLIENT",     false},
        {"MOTIONDETECT",   false},
        {"OSD",         false},
        {"POS",         false},
        {"SPLIT",        false},
        {"TTF",        false},
        {"RECORD",        false},
        {"FACE",        false},
        {"DFT",        false},
    };
    
    #define GW_PTF_START
        do{
            FILE* gw_log_fd = fopen(GW_LOG_FILENAME, "w+");    
            if(gw_log_fd)
            {
                   fclose(gw_log_fd);
            }
        }while(0);                                            
    
    #define GW_PTF(MODULE, LEVEL, FORMAT, args...)
        do{
            if(gw_debug_ModSet[MODULE].bFlag && (E_GW_DEBUG_LEVEL)LEVEL <= GW_DEBUG_LEVEL)
            {
                FILE* gw_log_fd = fopen(GW_LOG_FILENAME, "a+");
                if(NULL != gw_log_fd)
                {
                    SYSTEM_TIME tm;
                    char strTime[32] = {0,};
                    SystemGetCurrentTime(&tm);
                    snprintf(gw_log_fd, 32, "%02d:%02d:%02d", tm.hour, tm.minute, tm.second);
                    fprintf(gw_log_fd, "[%s:%06u:%06u] [%s] [%s] [%s %s] [%d] >> ", strTime, 
                SystemGetMSCount() - gw_ms_rcd, SystemGetMSCount(),
                gw_debug_ModSet[MODULE].pkMod,
                gw_debug_level_str[LEVEL], (NULL == STRRCHR(__FILE__, '/')) ?
                __FILE__ : strrchr(__FILE__, '/') + 1, __FUNCTION__, __LINE__);
                    gw_ms_rcd = SystemGetMSCount(); 
                    fprintf(gw_log_fd, FORMAT, ##args); 
                    fclose(gw_log_fd); 
                } 
            } 
        }while(0);                                                                                                                  
    
    #define GW_PTF_BARE(MODULE, LEVEL, FORMAT, args...)
        do{
            if(gw_debug_ModSet[MODULE].bFlag && (E_GW_DEBUG_LEVEL)LEVEL <= GW_DEBUG_LEVEL)
            {
                FILE* gw_log_fd = fopen(GW_LOG_FILENAME, "a+");
                if(NULL != gw_log_fd)
                {
                    fprintf(gw_log_fd, FORMAT, ##args);
                    fclose(gw_log_fd);
                }
            }
        }while(0);
    
    //单线程时间调试
    typedef std::map<const char*, uint> TM_GW_MAP;
    static TM_GW_MAP gw_map_ms;
    
    #define GW_TIME_START(MODE, LEVEL, NOTE) 
      if(gw_map_ms.find(NOTE) == gw_map_ms.end())
      {
        gw_map_ms.insert(std::pair<const char*, uint>(NOTE, SystemGetUScount()));
      }
      else
      {
        gw_map_ms.find(NOTE)->second = SystemGetUSCount();
      }
      GW_PTF(MODE, LEVEL, "%s Start
    ", NOTE );
    
    #define GW_TIME_END(MODE, LEVEL, NOTE)  
      GW_PTF(MODE, LEVEL, "%s End cost %u
    ", NOTE, gw_map_ms.find(NOTE) == gw_map_ms.end() 
      ? 0xFFFFFFFF : SystemGetUSCount() - gw_map_ms.find(NOTE)->second);
    
    #else
    
      #define GW_PTF_START
      #define GW_PTF(MODULE, LEVEL, FORMAT, args...)
      #define GW_PTF_BARE(MODULE, LEVEL, FORMAT, args...)
      #define GW_TIME_START(MODE, LEVEL, NOTE)
      #define GW_TIME_END(NODE, LEVEL, NOTE)
    
    #endif
    

    Notepad++ Replace功能Ctrl+H,正则表达式替换

      

      Find what:    [)]$ ^[{]      、  

                ==>[(]匹配 ),,$匹配行尾, 匹配回车换行,^匹配行首,[{] 匹配 { 

      Replace with:   ) { GW_PTF(E_GW_MOD_RECORD, E_GW_INFO, "%s\n", "test");

                ==>替换为 ) , 换行, {,  换行, Table , 桩字符串

     

  • 相关阅读:
    C#下对象与JSON串互相转换
    靠纯技术是否能渡过中年危机
    个人小结
    Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现
    Lex&Yacc Parser错误发生后再次parser之前恢复初始状态
    lex中yyrestart()的使用
    go特性-数组与切片
    go特性-defer
    golang实现mysql udf
    go创建动态库
  • 原文地址:https://www.cnblogs.com/kuikuitage/p/9546284.html
Copyright © 2011-2022 走看看