c++ - Q_ASSERT 破坏了 C++ 异常处理

标签 c++ qt exception

我在类方法中有这个简单的代码(使用 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 的预期行为,还是我应该更彻底地查看我的代码?

最佳答案

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

关于c++ - Q_ASSERT 破坏了 C++ 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906498/

相关文章:

c++ - 如何调试在未处理的异常中终止的程序?

c++ - Visual Studio 链接器错误

c++ - 为什么CPP中有定义常量和声明常量?

c++ - GDB 检查命令与地址的混淆

c++ - 我是否正确重构了 Qt Wiki 中的这个示例?

c++ - 显示QImage的方式

c++ - 从 C、C++ 在 Linux 中发出系统命令

c++ - 在 Qt Creator 新项目向导的自定义模板中创建类?

c++ - std::current_exception 如何工作?

c# - 为什么我得到 "The given path' 格式不受支持”错误