当前位置: 首页 > 工具软件 > elog > 使用案例 >

elog调试技巧 --参考 ST官方的USE_FULL_ASSERT-调试技巧

周育
2023-12-01

前面写过文章,很简单,看git代码,也是这个技巧。

文件:#define __ELOG_H__

56行

#ifdef ELOG_ASSERT_ENABLE
    #define ELOG_ASSERT(EXPR)                                                 \
    if (!(EXPR))                                                              \
    {                                                                         \
        if (elog_assert_hook == NULL) {                                       \
            elog_a("elog", "(%s) has assert failed at %s:%ld.", #EXPR, __FUNCTION__, __LINE__); \
            while (1);                                                        \
        } else {                                                              \
            elog_assert_hook(#EXPR, __FUNCTION__, __LINE__);                  \
        }                                                                     \
    }
#else
    #define ELOG_ASSERT(EXPR)                    ((void)0);
#endif

如果定义了ELOG_ASSERT_ENABLE就执行 

如果没有定义ELOG_ASSERT_ENABLE就啥也不做

 

执行什么?

 #define ELOG_ASSERT(EXPR)                                                 
    if (!(EXPR))                                                              
    {                                                                         
        if (elog_assert_hook == NULL)
         {                                       
            elog_a("elog", "(%s) failed at %s:%ld.", #EXPR, __FUNCTION__,__LINE__);
            while (1);                                                        
        } 
        else 
        {                                                              
            elog_assert_hook(#EXPR, __FUNCTION__, __LINE__);                  
        }                                                                     
    }

 检测EXPR

如果EXPR==0执行

如果EXPR!=0就啥也不做

 

执行什么?

        if (elog_assert_hook == NULL)
         {                                       
            elog_a("elog", "(%s) failed at %s:%ld.", #EXPR, __FUNCTION__,__LINE__);
            while (1);                                                        
        } 
        else 
        {                                                              
            elog_assert_hook(#EXPR, __FUNCTION__, __LINE__);                  
        }             

如果狗子函数是空空如也的话 就打印一下 然后死循环等死

如果写了狗子函数 就跑狗子函数。(ST的就是没有狗子函数)

APP应用举例:

int8_t elog_find_lvl(const char *log) {
    ELOG_ASSERT(log);

####}

关于狗子函数 看下文

 类似资料: