Qt 4.8.7记忆伪影

时间:2018-06-13 17:09:54

标签: c++ qt memory-leaks memory-dump qsharedpointer

我需要使用Qt 4.8.7 for Embedded Linux来创建一个非常简单的测试项目。 项目包括2个表单 - 对话框(由QTextEdit和按钮组成。按钮清除 QTextEdit和QClipboard)和MainWindow(由执行Dialog的按钮组成)。

我编辑文本,复制其中的一部分。然后清除编辑器和剪贴板。之后我无法粘贴文字, 但是我使用gcore转储内存并查看我复制的文本(html格式的几个副本)。 这些物体留在记忆中的是什么?这些临时对象或内存是否泄漏? 或者我使用了错误的东西。

1 个答案:

答案 0 :(得分:1)

如果您已经拥有的核心是基于某个x86平台的Linux上的基于ELF的核心,并且您的进程使用了​​libc malloc,那么了解这些对象(临时对象或泄漏)的一种方法是使用免费的开源软件https://github.com/vmware/chap来解决这个问题。在你构建了chap之后,你可以这样开始:

chap core-file-name

然后回答您的特定问题,从chap提示符发出以下命令:

重定向

显示泄露

显示锚定

显示免费

然后查看3个结果文本文件中的每一个,以查看您在核心中看到的模式。如果在“show leaked”的输出中看到模式,则表示存在泄漏。如果在“show anchored”的输出中看到,对象很可能被保存在某个容器中,但仍有可能泄漏。如果在“show free”的输出中看到它,则来自临时分配,现在已被释放。

或者,如果您已经知道该模式的虚拟地址并希望了解它的使用方式,那么在您开始执行给定内核之后,您可以使用以下命令:

描述十六进制虚拟地址