2011-01-31 9 views
3

複数の.netコンポーネントをホストするネイティブC++アプリケーションがあります。何らかのエラーが発生すると、このアプリケーションはMiniDumpWriteDump関数を使用してミニダンプを作成します。ここで問題小さなダンプファイルを生成するためにMiniDumpWriteDumpに渡されたが、CLRスタックを見る能力を持つべきであるwindbgで!clrstackを使用できるようにするために.netコンポーネントをホストするネイティブC++プロセスをダンプする最小MINIDUMP_TYPEはありますか?

[Flags ]enum MINIDUMP_TYPE { 
MiniDumpNormal = 0x00000000, 
MiniDumpWithDataSegs = 0x00000001, 
MiniDumpWithFullMemory = 0x00000002, 
MiniDumpWithHandleData = 0x00000004, 
MiniDumpFilterMemory = 0x00000008, 
MiniDumpScanMemory = 0x00000010, 
MiniDumpWithUnloadedModules = 0x00000020, 
MiniDumpWithIndirectlyReferencedMemory = 0x00000040, 
MiniDumpFilterModulePaths = 0x00000080, 
MiniDumpWithProcessThreadData = 0x00000100, 
MiniDumpWithPrivateReadWriteMemory = 0x00000200, 
MiniDumpWithoutOptionalData = 0x00000400, 
MiniDumpWithFullMemoryInfo = 0x00000800, 
MiniDumpWithThreadInfo = 0x00001000, 
MiniDumpWithCodeSegs = 0x00002000, 
MiniDumpWithoutManagedState = 0x00004000, 
}; 

の最小セットは何ですか)?確かに、完全なメモリダンプは動作しますが、どのように耐えられる最小限しか得られないのでしょうか?

答えて

3

実際には、それは(ダンプを小さくすると、管理コールスタックを抽出することができるように)、これらのオプションを指定するのに十分です:

  1. MiniDumpNormal(デフォルト)
  2. MiniDumpWithProcessThreadData
  3. MiniDumpWithThreadInfo
  4. MiniDumpWithUnloadedModules

オレグ・スタロドゥモフ氏のおかげで、http://debuginfo.com/

0

私が知る限り、完全なダンプが必要です。その理由は、スタックの内容をデコードするためには、CLRによって非公開に割り当てられたメモリー(JITtedメソッドなど)が必要なためです。

これらのメモリ領域を手作業で小さなダンプに追加することは理論的には可能ですが、上記の列挙型の値のうち、完全なダンプだけがその情報を含むことになります。

関連する問題