2013-08-02 35 views
3

不久之前,我們明白即使發佈版本可能會不正確地運行 - 可能會下降 - 可能會掛起等。因此,我們決定實施轉儲創建過程。所有步驟都很快在互聯網上找到。但其中一個 - 主要的 - 對我們來說仍然是不可理解的。MiniDumpWriteDump及其MINIDUMP_TYPE類型

根據MSDN的MINIDUMP_TYPE支持23個標誌。但是對於下一個問題沒有深入的技術解釋:他們是否都在自己的應用領域獨立?或者它們可以成對使用三倍?他們都可以同時使用嗎?我可以在一些組中使用它們嗎(例如,前3個標誌 - 幾乎與其他5個標誌產生的轉儲相同)。 我的意思是,當我將用於前。 1 + 3標誌 - 它將完全等於使用標誌4 + 6 + 9。或者標誌1或標誌3或... - 是所有其他標誌的疊加嗎? 還是什麼?我想了解所有可用標誌之間的所有可能的交叉點。因爲也許使用標誌沒有實際意義3 + 12 + 14 對於前者,我目前的目標是創建內存中絕對全部可用數據的轉儲。我應該能夠查看所有線程,所有local-static-global-in_heap變量。 我的意思是,當我打開一些由標誌bla + bla + bla組合生成的轉儲時,它應該與我可以直接將調試器直接附加到進程時的情況完全相同。我應該獲得所有可能的數據!

P.S. MiniDumpWithFullMemory - 不給我這樣的能力((爲什麼?@ FULL @內存這個詞 - 並不意味着FULL?它只是它的一部分而已?

回答

3

一個小型轉儲包含一堆表示進程的碎片。內存使用的內存只是其中的一部分,關於線程,句柄等的元數據都是額外的部分。

所有這些數據存儲在.dmp文件中的單獨「流」中可以看到here

選擇要包含的這些流中的哪一個通過幾個標誌表示爲MiniDumpWriteDump然後使用一大塊標誌來定製多少內存包含在內存流中,這只是爲了讓開發人員能夠最小化生成的文件的大小。對於所有的崩潰轉儲,我們產生,我們通常使用這些MINIDUMP_TYPE標誌:

MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithModuleHeaders | 
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData | 
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo 


WinDbg中有一個未公開的命令,你可以用它來轉儲故障轉儲文件的內部:

.dumpdebug 

您可以在查看故障轉儲文件時使用此查看包含哪些流,查看所有模塊,內存部分等。

1

使用VS 2010時,它不識別MINIDUMP_TYPE標誌MiniDumpWithModuleHeaders。以下標誌適用於我: -

MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModules | 
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData | 
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo | 
MiniDumpWithFullAuxiliaryState | MiniDumpIgnoreInaccessibleMemory | 
MiniDumpWithTokenInformation