Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间才能调试
Posted
技术标签:
【中文标题】Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间才能调试【英文标题】:Qt 5.1.0 on Windows using minGW 4.8 taking a really long time to debug 【发布时间】:2013-09-12 08:38:39 【问题描述】:我已从 qt-project 下载页面下载并安装了适用于 Windows 32 位 (MinGW 4.8) 的 Qt 5.1.0。我已经运行了安装程序,并且能够使用这些库和 minGW 4.8 32 位工具链来编译和运行应用程序。
但是,我有一个大型应用程序,当我尝试调试它时(使用与 minGW 工具链捆绑的 gdb),开始运行需要大量时间,并且与应用程序的任何交互都需要很长时间去完成。不是烦人的时间,而是无法使用的时间。有没有其他人遇到过这个问题,有什么解决办法吗?
如果这有帮助,我在调试时会得到很多输出:
Temporarily disabling breakpoints for unloaded shared library "C:\Qt\Qt5.1.0\5.1.0\mingw48_32\plugins\somefolder\somelib.dll"
【问题讨论】:
【参考方案1】:在 7.4 和 7.5 之间的某个时间点引入了一个 gdb 错误,这使得它变得更慢。在调试 QObject 类时,慢的会变得非常慢。
通过禁用调试助手,您可以改进它,但是您会错过本地变量和表达式中的许多宝贵信息。例如,您不能很好地显示 QLists 的内容等...
似乎:
从 CVS 构建 gdb 或 使用较旧的 gdb (7.4.1)解决问题。
【讨论】:
【参考方案2】:Qt 创建者在其 gdb 选项中有“尝试快速启动”。很有帮助。
或者您可以切换到在 Windows 上使用 MSVC 编译器。这也将您的调试切换到 CDB 而不是 GDB 并完全绕过问题。如果您不喜欢 MS IDE,您可以安装 MSVC 编译器并将其插入 QtCreator 而不是 mingw。
附:这也为您提供了可读的核心转储,这是天赐之物。
【讨论】:
为我带来了从 90 秒到 7 秒的调试启动时间。想知道午餐是不是免费的。 午餐不是免费的。事实证明,这个选项所做的只是推迟库加载,直到应用程序崩溃。因此,当应用程序崩溃并且您想找出原因时,您仍然需要等待额外的 83 秒。所以这个选项的好处是微不足道的。 我绝对记得这对我很有帮助。启用此选项后,肯定还不到 80 秒。虽然我已经开始使用 MSVC 编译器,但这并没有这个问题。 Unix 从一开始就没有任何 GDB 启动问题。顺便说一句,msvc 编译器具有剖析 Windows 上的核心转储的能力,因此您可能也想切换。 所以当你使用不同的编译器 (MSVC) 构建但继续使用相同的调试器 (gdb) 时,调试器会快速启动吗?听起来不错。 不,使用 MSVC 构建您只需使用不同的调试器 (CDB)【参考方案3】:请参阅Zeks' answer 上的 cmets。他在那里解释说,从 MinGW 工具链切换到 Microsoft 工具链(编译器、调试器)可以完全解决问题。幸运的是,Qt Creator 支持 Microsoft 工具链,因此您无需切换 IDE。
在我这样做之后,调试器启动时间现在是 4 秒,并且在应用程序崩溃时它有零延迟。它也sped up builds很多。
作为参考,我已经描述了我如何设置我的系统here。
【讨论】:
【参考方案4】:在更改了几个设置后,我设法显着提高了调试速度:
确保编译器是 gcc.exe 而不是Qt5.1.0\Tools\mingw48_32\bin
文件夹中的 g++.exe
在工具->选项->调试器->本地和表达式菜单中未选中Use Debugging Helper
未选中 Stop when qWarning() is called
和 Stop when qFatal() is called
【讨论】:
gcc 和 g++ 没有区别。它仍然是相同的编译器。您列表中的第一项是无操作。 当然,调试助手可以提高速度,但这是一个主要功能,如果没有它,在调试的同时观看 Qt 类几乎是不可能的。以上是关于Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间才能调试的主要内容,如果未能解决你的问题,请参考以下文章
Qt Creator新安装后运行一个程序后,出现错误:Error while building/deploying project dict-qt (kit: Desktop Qt 5.10.0 Mi
如何修复 Windows 上的 Qt 控制台输出(使用 `qInstallMsgHandler` 和 `qDebug`)?