我需要從程序獲取崩潰轉儲。我如何得到它?本程序是用C#編寫的。什麼是崩潰轉儲?何時創建?它保存在哪裏? 我如何閱讀?如何獲取崩潰轉儲
如何獲取崩潰轉儲
回答
既然你說C#我假設你正在使用Windows平臺。
crashdump或只是轉儲是在特定時間點進程的完整內存快照和其他相關係統信息。轉儲可以用來調試程序崩潰,掛起,內存和資源泄漏,還可能有更多的問題,我沒有在這裏列出。
在崩潰並掛起的情況下,您想從崩潰轉儲中獲取的第一部分數據將是callstack。這表明崩潰點或操作被阻止的位置,並且從不返回,所以程序坐着並且什麼都不做。
對於資源泄漏,可以在一段時間內收集進程的多個內存轉儲,並檢查內存中哪些對象的增長最多。這可以幫助縮小代碼的哪些部分導致泄漏。要了解有關調試特定問題的更多信息,我強烈建議您使用this blog。
有幾種方法可以捕獲轉儲文件。
- Procdump(http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx)
- 的Visual Studio 2010(http://msdn.microsoft.com/en-us/library/vstudio/fk551230(v=vs.100).aspx)
- 的WinDbg - 不壞,但超過恐嚇其他工具
隨着procdump,你可以簡單地做:
c:\>procdump.exe -ma YourProcessName.exe
該命令的結果將是YourProcessNa的完整內存快照me.dmp寫入c:\。 -ma開關指定轉儲完整的內存映像。如果你正在調試崩潰或掛起,你可能會離開-ma開關。請記住,如果您去檢查數據結構時沒有完整的內存轉儲,則可能無法獲得有效數據。如果沒有完整的內存轉儲,您仍然可以獲得通常足夠用於崩潰和掛起的調用堆棧數據。我通常在硬盤空間方面的錯誤是便宜的,所以收集完整的轉儲。
Procdump還會按時間間隔或滿足特定條件時自動進行轉儲。請閱讀上面鏈接中的文檔以獲取更多信息。我建議的一個開關是-e
。
c:\>procdump.exe -ma -e YourProcessName.exe
而不是立即寫入轉儲它只會在程序崩潰時寫入。
使用Visual Studio 2010,您可以使用調試器附加到進程並保存轉儲文件。 (請記住,當F5調試Visual Studio自動附加的程序時)。當程序處於「中斷狀態」(斷點,未處理的異常,崩潰)時,Debug
菜單將可以選擇Save Dump As...
。然後,您可以將該轉儲保存在任何你想要的地方。
既然您提到C#,您很可能會收集託管的轉儲文件。最簡單的方法是使用Visual Studio 2010.簡單地,打開您創建的轉儲文件,就像其他文件一樣,然後開始調試。
但是,如果這不是一個選項,您可以隨SOS擴展一起使用VS2008或WinDbg。儘管我強烈推薦Visual Studio 2010,但SOS擴展和WinDbg通常具有相當陡峭的學習曲線。要詳細瞭解SOS,請查看這些MSDN文章here和here。
我推薦使用Visual Studio或procdump的另一個原因是他們會收集您期望的轉儲文件。我建議您清除任務管理器的「創建轉儲文件工具」。原因是它會收集64位的32位進程轉儲,這些進程過於難以調試。
您也可以嘗試使用WinDbg的
崩潰時的RAM內存的處理器的內容和某些部分複製到文件轉儲。該文件在錯誤的關鍵位置創建,可用於調試問題。
這在過去對我有效。這是一個鍵盤快捷方式,可以在Windows中崩潰轉儲。
* Start Registry Editor.
* Locate the following registry subkey:
o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\i8042prt\Parameters
* On the Edit menu, click Add Value, and then add the following registry entry:
o Name: CrashOnCtrlScroll
Data Type: REG_DWORD
Value: 1
* Exit Registry Editor and then restart the computer.
http://vinaytechs.blogspot.com/2010/01/how-to-get-crash-or-hang-dump.html
盧克,崩潰轉儲是目前涉及到應用程序的狀態數據的整袋的碰撞已經發生,傾銷就意味着某個地方記錄所有這些信息,一般在一個文本文件中。
一個基本的方法是在發生異常時記錄整個堆棧跟蹤,以便稍後調查並查看哪種方法失敗並拋出哪個異常,參數值是什麼等等。這不是真正的粉碎垃圾場,但在很多情況下都有很大幫助。
有通過MS有關崩潰轉儲和應用程序崩潰最近開發的東西,我認爲這是有關Windows 7的實際...
在這裏看到:應用程序恢復和重新啓動
http://msdn.microsoft.com/en-us/library/cc948909(v=vs.85).aspx
在Windows XP中,你可以創建此工具轉儲文件:
一旦安裝,瀏覽到命令行PID是你想要得到的崩潰轉儲進程的PID的安裝目錄,並運行
userdump PID
(您可以在任務管理器中找到它,但你可能需要將該列添加到標準視圖)。
然後可以在Visual Studio中打開此文件 - 只需確保您已構建符號。
在Windows 7只需右鍵點擊在任務管理器的進程,並選擇「創建轉儲文件」
,應使用ADPlus。它帶有用於Windows的調試工具。 它會在其主目錄下創建崩潰轉儲文件夾。之後您可以使用WinDbg分析它們。
- 1. 開始時應用程序崩潰 - 如何獲取崩潰轉儲文件?
- 2. 轉儲崩潰轉儲
- 3. 如何在處理異常時獲取崩潰轉儲?
- 4. Android崩潰轉儲
- 5. 如何打開C#崩潰轉儲(Minidump)
- 6. Microsoft.Diagnostics.Runtime:如何閱讀崩潰轉儲?
- 7. 從崩潰轉儲中提取變量
- 8. Windbg崩潰轉儲分析
- 9. 崩潰生成轉儲
- 10. Erlang:如何禁用「崩潰轉儲」和「核心轉儲」生成?
- 11. 如何在ndk中獲得崩潰轉儲。不在調試
- 12. 在崩潰轉儲中獲取堆棧的時間戳
- 13. 獲取IIS工作進程崩潰轉儲
- 14. 我無法獲取崩潰文件的轉儲文件
- 15. 如何從小型轉儲崩潰獲取操作系統信息?
- 16. 如何獲取Android崩潰日誌?
- 17. 的iPad - 如何獲取崩潰報告
- 18. 我在哪裏可以找到Windows崩潰轉儲(藍屏崩潰轉儲)?
- 19. 崩潰轉儲分析:如何找到導致崩潰的模塊和指令
- 20. 查找基於崩潰轉儲的崩潰位置
- 21. 一個進程在Windows崩潰..崩潰轉儲位置
- 22. 獲取 - [CFURL保留]崩潰?
- 23. 分析Asp.net死鎖崩潰轉儲
- 24. Windows服務器崩潰轉儲分析
- 25. POSIX上的C++崩潰轉儲
- 26. 自動創建Visual C++崩潰轉儲
- 27. 需要崩潰轉儲翻譯
- 28. chkimg錯誤的意義崩潰轉儲
- 29. 在windbg中分析崩潰轉儲
- 30. 從核心轉儲崩潰中恢復
操作系統?平臺?語言? – 2011-02-14 13:18:42
你的意思是你需要在應用程序崩潰時創建一個dump *,或者你只需要運行正在運行的應用程序的內存轉儲?因爲兩者完全不同。 – 2011-02-14 13:39:36
http://blogs.msdn.com/b/debugger/archive/2009/12/30/what-is-a-dump-and-how-do-i-create-one.aspx - 很好的解釋! – 2013-12-28 20:58:54