最近看公司以前的一个项目,用release版本运行不会出现问题,但是用debug版本的就会出现很多断言错误(AssertValid()位置),致使程序崩溃,我在解决的时候也令我很头大,因为这个用到了BCG库,那么我的问题来了。
1,用bcg是不是经常会遇到这种情况?(因为我以前也遇到过这种情况)
2,这种断言错误是否一定要解决,不解决会有什么隐患?(因为release版本是可以用的)

解决方案 »

  1.   

    断言是debug下才执行的热lease可以用旧型了阿
      

  2.   

    注意各个变量一些初始化等,Release会帮你优化初始化
      

  3.   

    Assert主要是提醒你需要注意一些地方,这些变量在这个时候有问题.主要是帮你减少程序的bug
      

  4.   

    ASSERT宏在debug下弹出对话框,在release下没作用,所以用if来判断比ASSERT要好。
      

  5.   

    如果Debug版本的现很多断言错误(AssertValid()位置),致使程序崩溃,那么原则上你的Release版也会一定当掉。
    我们用ASSERT有的时候只是一些警告,但是跳过程序也不会有问题,这样的ASSERT才不会导致程序崩溃。
    eg:
    ASSERT(!str.IsEmpty());
    strSqlConn = str;
    ...ASSERT(pOther);
    pOther->Function();
      

  6.   

    #ifdef _DEBUG
    void CXXXXView::AssertValid() const
    {
    CListView::AssertValid();
    }void CXXXXView::Dump(CDumpContext& dc) const
    {
    CListView::Dump(dc);
    }CXXXXView* CPRJExplorerView::GetDocument() // non-debug version is inline
    {
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPRJExplorerDoc)));
    return (CPRJExplorerDoc*)m_pDocument;
    }
    #endif //_DEBUG
    release版本是不用这些的,所以不会崩,那代表不处理这些错误也可以吗?总感觉用着心里没底,毕竟是要给客户用的,可是解决又很困难,网上也有好多人说是BCG的问题,不知道是不是真这么回事。。