我可以从 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() 方法上