我正在调试内核内存损坏问题。从我拥有的资源中,我能够找到地址(物理)03a08000(每次都保持变化),虚拟的 - c3a08000 正在被覆盖。
现在我想知道分配了这个内存的进程。我怎样才能做到这一点?
简而言之,我的问题是,如何找到已分配给定物理地址的进程的名称(进程 ID 或任何信息)?
如果我不清楚我的问题,请告诉我。
编辑:忘了提到我有完整的内存转储(完整的 2 GB 内存)
我正在调试内核内存损坏问题。从我拥有的资源中,我能够找到地址(物理)03a08000(每次都保持变化),虚拟的 - c3a08000 正在被覆盖。
现在我想知道分配了这个内存的进程。我怎样才能做到这一点?
简而言之,我的问题是,如何找到已分配给定物理地址的进程的名称(进程 ID 或任何信息)?
如果我不清楚我的问题,请告诉我。
编辑:忘了提到我有完整的内存转储(完整的 2 GB 内存)
通过PageMap 工具,我们可以映射内存中的所有进程。 PageMap 工具由两个单独的命令行实用程序组成:
page-collect.c — 收集内存“快照”;在目标平台上运行。
page-analyze.cpp — 分析内存“快照”并生成报告;在任何平台上运行。
编辑 - - -
要调试故障转储,可以使用gdb和其他工具来完成。分析为快速概览故障转储和其他. 故障转储的完整教程。
重新编辑.......................我不太确定你的问题,但是当我们分析故障转储;它开始于
linux:/var/crash/20111222 # crash System.map-2.6.32.49-0.3-default \
vmlinux-2.6.32.49-0.3-default.gz vmcore
然后我们可以列出所有ps
同时显示PID
&的进程Physical Address
。
showmap
崩溃工具内部有一个命令。这将告诉确切的 pid 以及该进程使用的所有内存。这是我正在寻找的确切信息。
Kmem
显示有关相关过程细节的更好统计数据。
crash > kmem <address>