首页 > 解决方案 > 从 Qt Creator 运行 valgrind 的各种问题(无限运行,黑屏...)

问题描述

所以,当我从 Qt Creator 运行 valgrind memcheck 工具时,我遇到了非常奇怪的问题。

首先,更改工具 -> 选项 -> 分析器 -> Valgrind 中的设置似乎并没有改变任何东西。例如,Backtrace frame count最初设置为 25,当我将其更改为 20 或任何其他值时,Qt Creator 继续运行 valgrind 和--num-callers=25.

QProcess其次,当我用我的单元测试项目(它测试我编写的库)运行 Valgrind 内存分析器时,当我遇到一个测试来验证在只读脚本上启动 a 是否返回预期的错误信号时,我最终会无限运行。为此,我的测试尝试运行具有只读权限的虚拟脚本。在我的测试类中,我创建了一个原始指针,并且该指针在信号被截获QProcess时执行的槽中被清除。QProcess::finished我的单元测试程序在到达指令时卡住了process->start(...),valgrind 表示内存泄漏,我必须中止它。我知道 valgrind 会使程序变慢,但我尝试过等待,但它只是卡住了。请注意,如果我deletestart指令,程序运行到最后(当然,我的测试失败了,因为进程在它有机会尝试运行程序并发出finished报告错误的信号之前就被删除了)。当我process->waitForFinihed()在我的过程之前添加时delete,我又被卡住了。所以在我看来,finished信号永远不会发出,并且由于某种原因,即使没有process->waitForFinihed()线程被卡住。即使waitForFinished()达到超时,它仍然卡住。

我的另一个奇怪的问题是,当我运行我的 QML 应用程序(也使用我的库)时,我得到一个空的白色窗口。我花了一些时间追踪问题的根源,这就是我发现的:

这对我来说没有多大意义。我无法将所有这些奇怪的错误之间的点联系起来。此外,从终端运行 valgrind 不会导致任何这些问题。我考虑从我的终端而不是 Qt Creator 使用 valgrind,但我最终遇到了来自外部库(Qt 和/或 Qt 使用的库,也许还有我的测试框架)的几十个问题。我在那个混乱中找不到我自己的问题。Qt Creator 允许通过取消勾选来隐藏这些错误External Errors复选框,非常方便。从终端使用 valgrind 时,我无法获得更清晰的输出,我阅读了有关使用抑制文件的信息,但该过程似乎非常麻烦。也许我在 Qt Creator 中提到的那些问题只是 IDE 中的错误,而从我的终端使用 valgrind 将是解决方案?但是,如何方便地摆脱外部库中的所有 valgrind 错误?

我希望你能帮助我从 Qt Creator 修复 valgrind,或者在我的终端使用它,同时隐藏所有这些我不感兴趣的错误。谢谢。

编辑:我在 Ubuntu 20.04 上运行 Qt Creator 4.14.1,在 VirtualBox VM 中运行。Valgrind 版本是 3.15。

标签: c++qtqmlqt-creatorvalgrind

解决方案


推荐阅读