【问题标题】:What is minimum MINIDUMP_TYPE set to dump native C++ process that hosts .net component to be able to use !clrstack in windbg什么是最小 MINIDUMP_TYPE 设置以转储托管 .net 组件的本机 C++ 进程,以便能够在 windbg 中使用 !clrstack
【发布时间】:2011-11-24 22:51:51
【问题描述】:

有托管多个 .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 堆栈)?当然,完整的内存转储会起作用,但如何只获得可承受的最小值?

【问题讨论】:

    标签: .net debugging dump minidump minidumpwritedump


    【解决方案1】:

    事实上,指定这些选项就足够了(使转储变小并能够提取托管调用堆栈):

    1. MiniDumpNormal(默认)
    2. MiniDumpWithProcessThreadData
    3. MiniDumpWithThreadInfo
    4. MiniDumpWithUnloadedModules

    非常感谢 Oleg Starodumov 表单 http://debuginfo.com/

    【讨论】:

      【解决方案2】:

      据我所知,您需要一个完整的转储。原因是要解码堆栈内容,您需要由 CLR 私有分配的内存(例如 JITted 方法)。

      理论上可以手动将这些内存区域添加到较小的转储中,但是在您上面列出的枚举值中,恐怕只有完整的转储会包含该信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多