我怎么知道程序死在哪里了?线程死了后,我在所有循环的地方都放了断点,可是还是不能捕捉到程序的执行,我该怎么办,我在线程中用了同步,也就是读写保护的同步机制。

解决方案 »

  1.   

    可能是你的线程中的某个API 调用产生了异常,然后操作系统"傻掉了",严重时甚至会造成死机的.
      

  2.   

    1 CPU高达99%,可以排除和线程同步部分无关,因为死锁时,线程相当于永久Sleep了,不会太消耗资源。
    2 可以排除无限递归的原因;因为递归超过一定层次,系统会报异常错误
    3 基本可确定在某处循环时出了问题!好好检查一下代码吧
      

  3.   

    我刚才找到原因了,我在循环里仿佛调用了一个API函数,请各位强人看代码!
    AcquireWriteLock(&lock);
    if (WriteOK(&lock))
    {
         TRACE("Arrived here!_____");
         bIsPicture=Load(pStream);
         TRACE("Stopped here!\n");
    }
    else
    {
    ....
    }
    ReleaseWriteLock(&lock);
    Load(pStream)是一个CPicture类的函数,原型为
    BOOL CPicture::Load(IStream* pstm)
    {
    Free();
    HRESULT hr = OleLoadPicture(pstm, 0, FALSE,
    IID_IPicture, (void**)&m_spIPicture);
    if(SUCCEEDED(hr) && m_spIPicture)
    {
    ASSERT(SUCCEEDED(hr) && m_spIPicture);
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
    这个函数在我循环中执行了大约50000次,死掉了,郁闷啊!不知道该怎么办了!!!高人们给点指导啊,项目快到Deadline了。