【问题标题】:Does massif tool work correctly with multithreaded applications?massif 工具能否在多线程应用程序中正常工作?
【发布时间】:2012-09-01 11:32:06
【问题描述】:

我正在开发一个多线程应用程序,它似乎在运行期间分配了大量内存。所有内存都在执行结束时被释放,因此 valgrind 没有显示内存泄漏。我尝试使用 massif 工具找出发生了什么,但 ms_print 似乎只显示有关主线程的信息。但是,我相信绝大多数内存是在子线程中分配的。是否可以让地块显示有关它们的信息?

【问题讨论】:

  • 您使用的是哪种线程?你是如何分配内存的?特别是,你是直接用mmap吗?

标签: c multithreading memory-management valgrind massif


【解决方案1】:

你可以设置--trace-children=yes [default:no]

启用后,Valgrind 将跟踪通过 exec 系统调用启动的子进程。这对于多进程程序是必需的。

massif manual

【讨论】:

    【解决方案2】:

    对我(Ubuntu 12.04)来说,这似乎默认工作。就像在您的应用程序中一样,我的主线程不做任何事情(除了处理我的基于 gtk 的 UI),并且所有(取消)分配都在子线程中完成。

    我最初确实遇到了一些困难,因为我正在分析一个基于 autotools 的项目,并且在我的第一次尝试中,我正在分析由 libtool 生成的 shell 脚本,而不是我的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多