2013-07-01 62 views
2

我在調試內核內存損壞問題。從我所擁有的資源中,我可以找到地址(物理)03a08000(每次都會變化),虛擬c3a08000正在被覆蓋。已分配給定物理地址的進程信息?

現在我想知道,已經分配了該內存的進程。我怎樣才能做到這一點?

總之我的問題是,我如何找到已分配給定物理地址的進程的名稱(進程ID或任何信息)?

請讓我知道如果我不是清楚我的問題。

編輯:忘了提,我有完全內存轉儲(完成2 GB RAM)和我

+0

這樣被「破壞」,「不斷變化的每次」,不過是虛擬地址相同的物理地址? – sawdust

+0

@sawdust我相信操作提供了一個虛擬地址的例子,並不意味着它們總是獲得相同的virt - > phys映射。 「腐敗」是由一些未知的應用引起的。 –

+0

@Manty以及你可能知道,你舉的虛擬地址似乎是一個內核地址,這意味着,無論是「腐敗」你的數據是在內核中。如果您可以精確定位訪問此內存的代碼或模塊,則可以使用少數策略性printk()語句確定導致這些更改的過程。 –

回答

0

碰撞工具裏面有一個叫做showmap的命令。這將告訴確切的PID和該進程使用的所有內存。 這是我一直在尋找的確切信息。

Kmem顯示關於相關過程的細節的更好的統計數據。

crash > kmem <address> 
2

通過PageMap tools我們可以映射的內存。頁映射工具,所有的過程包括兩個獨立的命令在線實用程序:

page-collect.c - 收集內存「快照」;在目標平臺上運行。
page-analysis.cpp - 分析內存「快照」並生成報告;在任何平臺上運行。

EDIT ------

調試崩潰轉儲它可以與gdb和其他tools來完成。分析爲快速總覽崩潰dumpother。關於崩潰的完整教程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兩者。

+0

這些信息非常有用。謝謝你。但是目前我已經有了一個ramdump。我的環境不是一個正在運行的系統。我有一個我想調查的崩潰轉儲。 Neverthless你提供的信息是非常有用的。我將進行這些更改並嘗試重現崩潰。如果你能建議某種方式調試崩潰轉儲而不是實時系統,我將不勝感激。 –

+0

我編輯了一些關於崩潰轉儲的鏈接;希望他們可以幫助你。 – jhonnash

+0

嗨@jhonnash我已經使用了相同的碰撞工具,它具有一些來自我的原始組件的附加功能。但我無法看到任何有用的命令,它告訴我一個物理地址的進程名稱。 –