当我的项目在Visual Studio与Qt Creator中构建时,Q_ASSERT具有不同的行为

时间:2012-12-15 14:38:13

标签: c++ visual-studio qt qt-creator assert

这似乎是一个错误,因为在Qt Creator上,Q_ASSERT(false)导致我的应用程序退出,即使文档说它应该允许你打破断言:

  

在Windows上,对于调试版本,此函数将报告_CRT_ERROR   使您能够将调试器连接到应用程序。

在Qt Creator上:

在Qt Creator + MinGW中编译我的项目时,代码Q_ASSERT(false);会导致程序显示此消息(下面的屏幕截图),然后应用程序退出:

  

此应用程序已请求运行时将其终止   不寻常的方式请联系应用程序的支持团队获取更多信息   信息。

enter image description here

和“应用程序输出”窗格显示此调试输出:

ASSERT: "false" in file ..\IntegrateWithQt\main.cpp, line 6
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

在Visual Studio上:

使用Visual Studio编译同一个项目时(我使用Qt Addin导入它),我得到一个更有用的Abort / Retry / Ignore对话框,其中单击Retry会断言断言位置的程序:

enter image description here

在Qt Creator和Visual Studio中链接到Qt的Qt版本是4.8.1。这两个项目都是在调试模式下构建的。

那么如何让Qt Creator允许我在调试模式下断言?

2 个答案:

答案 0 :(得分:4)

我的猜测是你在Qt Creator中使用Mingw,在Visual Studio中使用MSVC(显然)。不同的编译器产生不同的代码。

尝试在Creator中使用MSVC(您需要获得使用该编译器构建的Qt版本来执行此操作!)并查看是否仍存在差异。

答案 1 :(得分:2)

  1. 可能在QtCreator的.pro文件中没有设置NDEBUG(在QtCreator的编译输出中检查)
  2. 使用标准c ++断言http://en.cppreference.com/w/cpp/error/assert