c++ - Qt 4.8.7 内存问题

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

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

我编辑文本,复制其中的一部分。然后清除编辑器和剪贴板。之后我无法粘贴文字, 但我使用 gcore 转储内存并查看我复制的文本(html 格式的几个拷贝)。 这些留在内存中的对象是什么?这些是临时对象还是内存泄漏? 或者我使用不正确。

最佳答案

如果您已经拥有的核心是来自某些基于 x86 的平台上的 Linux 的基于 ELF 的核心,并且您的进程使用了​​ libc malloc,那么了解这些对象是什么(临时对象或泄漏)的一种方法是使用免费的开源软件https://github.com/vmware/chap弄清楚这一点。构建完 chap 后,您可以像这样启动它:

章节核心文件名

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

重定向

显示泄露

显示锚定

免费展示

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

或者,如果您已经知道该模式的虚拟地址并想查看它是如何使用的,那么在给定核心上启动 chap 之后,您可以使用以下命令:

描述十六进制虚拟地址

关于c++ - Qt 4.8.7 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842760/

相关文章:

C++.eof。未读取文件的最后一个值

c++ - 如何在 Windows 中运行最初为 Linux 编写的已编译 C++ 代码?

linux - 驱动程序 CH341 USB 适配器串行端口或 QSerialPort 在 Linux 中不工作

c++ - 在 Linux 中使用 setsockopt 设置连接超时

c - 执行后内存(泄漏)

c++ - 在 Qt Creator 中使用正则表达式查找和替换多个文件

c++ - 在 Qt 中使用 vector

c++ - 内存泄漏与否?

ios - 如何使用 __block 和完成 block 避免内存泄漏

c++ - 程序终止后动态分配的内存