1

我可以从 Visual Studio 2008 捕获异常,我在发布模式下运行它并启用调试信息,所有异常 Debug->Exceptions 菜单和
SEH Exceptions (/EHa) 在 IDE 中打开
:调用方法的 QTimer:

m_NotificationTimer = new QTimer();
connect(m_NotificationTimer, SIGNAL(timeout()),
            this,SLOT(CheckOuterLinks()/*,Qt::DirectConnection*/));

这个bean每3秒调用一次的函数:

void CollectorWorker2::CheckOuterLinks()
{


            while(!rpm_urlStack->isEmptyO())
            {

                        QMutexLocker locker(m_pMutex1);

                        std::map<std::string,std::string > m = rpm_urlStack->topO();

                        locker.unlock();
            }

}

top0() 方法是从 QStack 获取顶部元素的函数,成员函数,看起来像这样它在其他地方用 pop() 删除了元素:

std::map<std::string,std::string >  UrlStack::topO()
{

    std::map<std::string,std::string > m;
    try
    {

        static QMutex mutex;
        QMutexLocker locker(&mutex);
            m = m_OuterLinksToProcessOutStack.top();


        return m;

    }

    catch (std::exception const & e)
    {
      std::cout << "Standard exception: " << e.what() << std::endl;

    }
    catch (...)
    {
       std::cout << "Unknown exception." << std::endl;      
    }

}

m_OuterLinksToProcessOutStack 是静态成员,并被来自代码中其他地方的元素填充,也受互斥锁保护。
m_OuterLinksToProcessOutStack 充满了成员,它留下了 2000 个元素,我确实在其他地方检查过,所以它不是空堆栈的问题。
我在运行应用程序一分钟后遇到的问题是在运行时出现此错误:

First-chance exception at 0x00403fc2 in app.exe: 0xC0000005: Access violation reading location 0x00000004.

在 QStack 的 top() 方法上

4

0 回答 0