相关疑难解决方法(0)

检测退出时释放的C内存"泄漏"

假设我有一个C程序(在Linux下运行),它操作许多数据结构,一些复杂,其中一些可以增长和缩小,但通常不会随着时间的推移而增长.观察到该程序随着时间的推移逐渐增加RSS(比可以通过内存碎片解释的更多).我想找到泄漏的东西.在valgrind这里运行是明显的建议,但是valgrind(带--leak-check=full--show-reachables=yes)显示没有泄漏.我相信这是因为数据结构本身在退出时正确释放,但其中一个在程序的生命周期中正在增长.例如,可能有一个链接列表随着时间的推移呈线性增长,有人忘记删除列表中的资源,但退出清理正确地在退出时释放列表中的所有项目.当然,如果它们被释放,那么它们是否实际上是"泄漏"存在一个哲学问题(因此问题中的引号).

是否有任何有用的工具来检测这个?我喜欢的是能够运行valgrind并让它生成当前分配的报告,就像退出时一样,但是要在信号上发生这种情况并允许程序继续.然后,我可以查找堆栈跟踪签名对它们的分配越来越多.

我可以可靠地得到一个漂亮的大"核心"从文件gdbgenerate-core-file; 有没有办法分析离线,如果我用一个方便的malloc()调试库编译malloc()

我可以完全访问源代码,并且可以修改它,但我真的不想手动检测每个数据结构,而且我对问题的一般解决方案(如valgrind提供)感兴趣,而不是如何解决这个问题.特别的问题.

我在这里寻找类似的问题,但它们似乎都是:

  • 为什么我的程序会泄漏内存?
  • 如何在退出时检测内存泄漏?(对我没用)
  • 如何检测核心文件中的内存泄漏?(很棒,但没有一个人有满意的答案)

如果我在Solaris下运行,我猜测答案是"使用这个方便的dtrace脚本".

c linux gdb valgrind memory-leaks

5
推荐指数
1
解决办法
789
查看次数

构建 Massif-Visualizer:包含找不到加载文件 CMakeFindDependencyMacro

我正在尝试在 CentOS 7 上构建Massif-Visualizer。不幸的是,我不得不尝试猜测依赖项,因为它们并未全部列在文件中INSTALL。迄今为止:

yum install git
yum install kdelibs-devel extra-cmake-modules \
            qt5-qtsvg-devel qt5-qtxmlpatterns-devel \
            kf5-kparts-devel kf5-karchive-devel
git clone https://github.com/KDE/massif-visualizer
cd massif-visualizer
mkdir build
(cd build && cmake .. && make && make install)
Run Code Online (Sandbox Code Playgroud)

这些 Qt5 和 KF5 包主要是通过反复试验以及 CMake 错误消息中的一些模式匹配而添加到命令中的yum……但我似乎不知道如何解决这些最后的错误:

-- Could not set up the appstream test. appstreamcli is missing.
CMake Error at /usr/lib64/cmake/KF5Archive/KF5ArchiveConfig.cmake:37 (include):
  include could not find load file:

    CMakeFindDependencyMacro
Call Stack (most recent call first):
  /usr/share/ECM/find-modules/FindKF5.cmake:74 (find_package)
  CMakeLists.txt:34 (find_package) …
Run Code Online (Sandbox Code Playgroud)

valgrind centos cmake massif centos7

3
推荐指数
1
解决办法
2448
查看次数

标签 统计

valgrind ×2

c ×1

centos ×1

centos7 ×1

cmake ×1

gdb ×1

linux ×1

massif ×1

memory-leaks ×1