簡體   English   中英

一段時間的內存轉儲

[英]Memory dump for period of time

當程序出現異常時,很容易捕獲進程的內存轉儲,然后使用 WinDBG 之類的工具對其進行分析。 但是,這是非常有限的,您只能獲得進程正在執行的操作的快照,並且在某些情況下,找出為什么到達代碼的某個部分真的很困難。

有沒有辦法在一段時間內捕獲內存轉儲,例如錄制電影而不是拍照,這將表明在那段時間內發生了什么變化,以及在該時間間隔內執行的代碼部分?

記錄許多內存轉儲

有沒有辦法在一段時間內捕獲內存轉儲,比如錄制電影而不是拍照

是的,那是存在的。 它稱為Procdump ,您可以使用-n參數定義轉儲次數,並使用-s定義轉儲之間的秒數。 對於較小的s值,它可能效果不佳,因為進行故障轉儲需要更長的時間。

例子:

procdump -ma -n 10 -s 1 <PID> ./dumps

但是,這種技術通常不是很有用,因為您現在有 10 個轉儲要分析,而不僅僅是 1 個 - 並且分析 1 個轉儲已經很困難。 AFAIK,沒有可以比較兩個轉儲並為您提供差異的工具。

現場調試

恕我直言,您需要的是實時調試。 WinDbg 也可以做到這一點。 開發調試(使用 IDE)和生產調試是兩種不同的技能。 因此,您無需在客戶的生產環境中安裝完整的 IDE,例如 Visual Studio。 實際上,如果您將現有的 WinDbg 安裝復制到 USB 記憶棒上,它將可以便攜式運行。

只需啟動 WinDbg、附加到進程 ( F6 )、啟動日志文件 ( .logopen )、設置 Microsoft 符號、配置異常 ( sx ) 並讓程序運行 ( g )。

遠程調試

也許您甚至可能想看看WinDbg 的遠程調試功能,但是,設置起來有點困難,通常是由於 IT 限制(防火牆等)。

Visual Studio 還提供遠程調試,因此您可以在您的機器上使用 VS,而只需在您客戶的機器上安裝一個較小的程序。 我幾乎沒有這方面的經驗,所以我不能告訴你太多。

日志記錄

在那個時間間隔內執行的代碼部分?

我看到任何公司采用的最典型的方法是打開應用程序的日志記錄功能。

您還可以使用 WPT( Windows 性能工具包)記錄有用的數據,即 WPR(Windows 性能記錄器),然后使用 WPA(Windows 性能分析器)對其進行分析。 隨着時間的推移,它會給你調用堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM