【问题标题】:Memory leak check in C/C++ under heavy load重负载下 C/C++ 中的内存泄漏检查
【发布时间】:2015-12-06 19:55:12
【问题描述】:

我很想知道如何在基于 C/C++ 的产品在重负载(Linux 平台)下检测到内存泄漏。

我知道 Valgrind 在查找内存泄漏、无效访问等方面做得很好。

但是使用 valgrind,产品需要在低负载下运行。使用 valgrind,您不能期望在高负载下运行产品。

高负载下,产品代码执行路径可能不同。在这种情况下,如果存在内存泄漏,如何捕获该内存泄漏。

有没有这样的工具可用?

【问题讨论】:

  • 最好的工具是你的头脑和良好的实践
  • 你不能一边吃蛋糕一边吃。您需要找到一种方法来测试这些不同的执行路径,而无需让内存分析器通过它们来处理它们。
  • 根据我的经验,最好的事情是,虔诚地使用 RAII 对象并确保您知道如何正确使用它们。 (它仍然归结为您的头脑和良好实践。)(此建议仅适用于 C++。)
  • 根据您的设计,您可以使用 valgrind 检查产品的各个类或子模块。我可以想象使用我的代码的合理子集编写某种虚拟进程。

标签: c++ c memory-leaks


【解决方案1】:

按照这些步骤覆盖系统功能。 1.自己制作.so文件,实现系统功能 2.使用LD_PRELOAD在系统中预加载.so文件 3. 就是这样,之后当我执行任何程序时,它都会调用我的自定义函数而不是系统函数。

但我有一个问题,递归调用。 当我的自定义函数被调用时,我在内部调用系统函数,它再次调用我的函数等等......

为了阻止它,我没有直接调用系统函数。相反,我搜索如下

static void * (*func)();
if(!func)
    func = (void *(*)()) dlsym(RTLD_NEXT, "malloc");

return(func(size));

感谢大家帮助解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-08
    • 2022-01-23
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2021-09-01
    • 2013-02-03
    相关资源
    最近更新 更多