程序仅在 Qt Creator 中使 valgrind 崩溃

问题描述 投票:0回答:1

我正在编写一个具有多个线程、大量 IO 等的 C++ 程序,我想检查内存泄漏。 该程序在调试版本和发布版本中运行良好。 但是,如果我从 Qt Creator (v 12.0.2) 和 Qt5.15.2 中运行 Valgrind,我会看到程序的一些输出,然后:

21:18:04: Analyzing finished.
21:18:04: Process exited with return value Process crashed
21:18:04: Analyzing finished.

但是没有输出显示崩溃的位置! 我尝试从 bash 命令提示符在我的程序上运行 valgrind,它运行良好(尽管有很多输出,因为没有 Qt 的抑制文件)。 没有崩溃。

在 Qt Creator 中运行 Valgrind 会暴露内存问题(我猜)。 但我找不到它! 我启用了核心(崩溃)文件,但我的程序崩溃不会导致写入核心转储。 我不知所措......我如何找出导致崩溃的原因?

crash qt-creator valgrind crash-dumps
1个回答
0
投票

我发现了原因(它扩展了我很久以前发现的解决方案)。 Qt 可以在执行 QRegularExpression 或 QRegEx 操作时使用自修改代码 (SMC)。

SMC 可能会使 valgrind 崩溃,这就是为什么我总是在“项目”>“运行”>“Valgrind 设置”>“Valgrind 通用设置”中启用 smc-check=all 选项。 如果展开该框,则会有一个选项用于在何处检查 SMC,默认情况下仅在堆栈上。

事实证明,我开始将 QRegularExpressions 设为静态(Qt 推荐,因为它们是资源密集型),这将它们移动到堆中。 一旦我将选项更改为“无处不在”,valgrind 又很高兴。

我不确定等效的命令行是什么,但在 Qt Creator 之外,valgrind 使用 --smc-check=all 选项运行良好。 但在 Qt Creator 内部,SMC 似乎将指针引导到问题区域,导致 valgrind 停止运行

© www.soinside.com 2019 - 2024. All rights reserved.