【问题标题】:How to dump the heap of running C++ process to a file under Linux?Linux下如何将正在运行的C++进程的堆转储到文件中?
【发布时间】:2014-09-10 04:27:40
【问题描述】:

我有一个在无头/嵌入式 Linux 机器上运行的程序,在某些情况下,该程序似乎占用了比我预期的更多的内存(如 top 等报告)使用。

由于故障情况很难在实际工作环境之外重现,并且由于嵌入式盒子没有安装 valgrind 或 gdb 等细节,我想做的只是写出进程的堆内存到一个文件,然后我可以将其传输到我的开发机器并在闲暇时查看,看看我是否可以从文件的内容中判断出占用了大部分堆的数据类型。如果我幸运的话,可能会出现很多像重复字符串或幻数这样的确凿证据,这将我指向我的代码中泄漏的地方,或者可能只是无限制地增长数据结构。

有什么好办法吗?我能想到的唯一方法是强制进程崩溃,然后收集核心转储,但由于故障情况很少见,如果我可以收集信息而不会使进程崩溃作为副作用,那将是更可取的。

【问题讨论】:

    标签: linux debugging heap-memory


    【解决方案1】:

    可以通过/proc/pid/mem读取整个进程的内存空间;您可以阅读 /proc/pid/maps 以查看内存空间中的位置(因此您可以找到堆的边界并仅读取它)。您可以在进程运行时尝试读取数据(在这种情况下,它可能会在您读取数据时发生变化),或者您可以使用 SIGSTOP 信号停止进程,然后使用 SIGCONT 恢复它。

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 2014-02-01
      • 2011-05-09
      • 1970-01-01
      • 2016-08-28
      • 2018-04-27
      • 2012-10-01
      • 1970-01-01
      • 2013-09-26
      相关资源
      最近更新 更多