5

いくつかの.netコンポーネントをホストするネイティブC++アプリケーションがあります。エラーが発生すると、このアプリケーションはMiniDumpWriteDump関数を使用してミニダンプを作成します。ここで質問の最小セットは何ですか

[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,
};

小さなダンプファイルを生成するためにMiniDumpWriteDumpに渡す必要がありますが、clrスタックを表示する機能があります)?確かに、フルメモリダンプは機能しますが、耐えられる最小値のみを取得するにはどうすればよいですか?

4

2 に答える 2

5

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

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

Oleg Starodumov フォームhttp://debuginfo.com/に感謝します。

于 2011-11-24T14:51:51.053 に答える
0

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

理論的には、これらのメモリ領域を手動で小さなダンプに追加することは可能ですが、上記の列挙値のうち、完全なダンプのみにその情報が含まれるのではないかと思います。

于 2011-01-31T13:46:29.117 に答える