Q_ASSERT打破了c ++异常处理

时间:2015-10-02 11:46:32

标签: c++ qt exception-handling

我在类方法中有这个简单的代码(使用std :: map< std :: string,std :: string>作为各种数据的容器):

 try {
    commonHeader->version = options.at("M3UA version").at(0);
  } catch (const std::out_of_range& err) {
    commonHeader->version = 1;
  }

我正在使用QtTest运行一些测试,一个特定的插槽

Q_ASSERT(isupPage->ui->cicLineEdit == isupResultPage->ui->cicLineEdit);

最后。

当此测试处于活动状态时,所有异常都将无法捕获,从而导致代码损坏并且线程的std :: terminate()。但是,将Q_ASSERT更改为QVERIFY似乎可以解决问题。

这是Q_ASSERT的预期行为,还是应该更彻底地查看我的代码?

1 个答案:

答案 0 :(得分:3)

Q_ASSERT是一个通用的调试宏,可能会在某些条件下终止您的程序(另请参阅qFatal)。 QVERIFY是要在测试中使用的宏,因此这是您应该使用的宏。