我正在调试内核内存损坏问题。从我拥有的资源,我能够找到一个地址(物理)03a08000(每次都变化),虚拟 - c3a08000被覆盖。
现在我想知道已分配此内存的进程。我怎么能这样做?
简而言之,我的问题是,如何找到已分配给定物理地址的进程的名称(进程ID或任何信息)?
如果我不清楚我的问题,请告诉我。
编辑:忘记提及我有完整的内存转储(完成2 gb ram)和我一起
答案 0 :(得分:2)
通过PageMap tools我们可以映射内存中的所有进程.PageMap工具包含两个独立的命令行实用程序:
page-collect.c - 收集内存“快照”;在目标平台上运行。
page-analyze.cpp - 分析内存“快照”并生成报告;在任何平台上运行。
EDIT ------
要调试崩溃转储,可以使用gdb和其他tools来完成。要快速分析崩溃dump和other。关于崩溃的完整教程dump.
RE-EDIT ................................... 我对你的问题不太确定,但是当我们分析crash dump时;它从
开始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
两者。
答案 1 :(得分:0)
在崩溃工具中有一个名为showmap
的命令。这将告诉确切的pid以及该进程使用的所有内存。
这是我正在寻找的确切信息。
Kmem
显示有关相关流程详情的更好统计数据。
crash > kmem <address>