繁体   English   中英

如何在Linux下将正在运行的C ++进程堆转储到文件中?

[英]How to dump the heap of running C++ process to a file under Linux?

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

由于故障情况很难在实际工作环境之外重现,并且由于嵌入式盒没有安装valgrind或gdb之类的优点,因此我想做的就是将进程的堆内存写到文件中,然后我可以将其转移到开发机上并仔细检查一下,看看是否可以从文件的内容中得知正在占用大量堆的数据是哪种数据。 如果我很幸运,可能会出现很多重复字符串或幻数之类的冒烟的枪,这使我指出了代码中正在泄漏的位置,或者可能只是无限扩展数据结构。

有什么好方法吗? 我能想到的唯一方法是强制进程崩溃然后收集核心转储,但是由于故障情况很少,因此如果我可以在不使进程崩溃的情况下收集信息,那将是更好的选择。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM