4

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

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

在 Qt 创建者上:

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

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

在此处输入图像描述

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

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 插件导入它)时,我会得到一个更有用的 Abort/Retry/Ignore 对话框,其中单击 Retry 会在断言位置中断程序:

在此处输入图像描述

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

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

4

2 回答 2

4

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

尝试在 Creator 中使用 MSVC(您需要获得使用该编译器构建的 Qt 版本才能做到这一点!)并查看是否仍然存在差异。

于 2012-12-15T23:35:14.467 回答
2
  1. 可能在 QtCreator 的 .pro 文件中没有设置 NDEBUG(在 QtCreator 的编译输出中检查它)
  2. 使用标准 C++ 断言http://en.cppreference.com/w/cpp/error/assert
于 2012-12-15T14:59:11.730 回答