gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:20 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

关于linux - Linux下如何将正在运行的C++进程堆转储到一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com