Poco:Bugcheck

Poco::Bugcheck
// Library: Foundation
// Package: Core
// Module:  Bugcheck
// Namespace: Poco

功能:Bugcheck提供了几个有用的宏,可以实现参数检测,逻辑错误检测,空指针检测,出现错误会抛出异常。如果链接的是libPocoFoundationd.so,且系统上存在debugger工具,并与程序关联,则debugger会启动,对程序进行调试。


poco_assert(cond)  /* 条件不成立,抛异常 */
poco_assert_dbg(cond)  /* 宏_DEBUG定义,条件成立,抛异常 */
poco_check_ptr(ptr)  /* 空指针,抛异常 */
poco_bugcheck()  /* 这个宏所在的代码,不应该被运行,如果被运行,则说明出现逻辑错误,抛异常 */
poco_debugger()  /* 纯粹break into debugger,不抛异常*/

注:debugger的存在与否,在windows上,是通过调用IsDebuggerPresent()来判断的;在UNIX上,通过环境变量POCO_ENABLE_DEBUGGER是否被设置来判断


demo

int t_poco_assert(int i,void *p)
{
    poco_assert(i > 3);
    poco_check_ptr(p);

    return 0;
}

int main()
{
    int i = 1;
    void *p = &i;
    try
    {
        t_poco_assert(i,p);
    }
    catch(Exception& e)
    {
        std::cout << e.displayText() << std::endl;
    }

    i = 10;
    p = NULL;
    try
    {
        t_poco_assert(i,p);
    }
    catch(Exception& e)
    {
        std::cout << e.displayText() << std::endl;
    }

    if (i > 0)
    {
        // everything is ok.
    }
    else
    {
        poco_bugcheck();
    }

    return 0;
}

结果

Poco:Bugcheck