关于ASSERT



ASSERT我设不了断点,请问我怎么能看到实实在在的ASSERT输出什么

  • liu xinran,

    您好!

    StellarisWare中ASSERT的定义如下:

    #ifdef DEBUG

    #define ASSERT(expr) {                                      \

                            if(!(expr))                        \

                            {                                  \

    __error__(__FILE__, __LINE__); \

                            }                                  \

                        }

    #else

    #define ASSERT(expr)

    #endif

    __error__(__FILE__, __LINE__)函数;传递文件名称和ASSERT宏调用的行编号。如果断言出错了会有相应的错误信息的文件名和行编号显示在console中

  • 支持楼上。

    ASSERT在debug.h中。楼主需要在程序中#define DEBUG才能使能这段程序。

    同时,更重要的,楼主需要定义__error__(__FILE__, __LINE__); 程序。

    比如,如例程中那样:

    #ifdef DEBUG

    void

    __error__(char *pcFilename, unsigned long ulLine)

    {

       while(1)

       {

       }

    }

    #endif

  • Driverlib中的ASSERT默认是不编译的,所以你无法设置断点。如果你想在ASSERT中设置断点,必须编译这段代码。

    所以你需要在代码或者编译器种定义DEBUG,如果你使用IAR,可以按照下图设置定义DEBUG

    另外DEBUG.h文件中的_error_这段代码可以根据你的需要改成相关代码,比如打印相应信息,以便于调试:

    #ifdef DEBUG
    #define ASSERT(expr) {                                      \
                             if(!(expr))                        \
                             {                                  \                         
                                  printf("\n\r ASSERT: File[%s],Line[%d],Func[%s].\n\r", \
                                  __FILE__,__LINE__,__FUNCTION__);\
                             }                                  \
                         }
    #else
    #define ASSERT(expr)
    #endif

  • ASSERT在大多数C语言程序中都提供支持,主要是用来在Debug模式下对某些条件进行保证,在正常编译时不会影响程序运行效率,也不会增大代码体积。所以楼主只需要定义DEBUG模式就可以了:

    #define DEBUG

    这样也是一样的。