创建在64位操作系统中运行的32位进程的minidump

时间:2012-10-22 18:21:04

标签: windbg crash-dumps sos wow64 minidump

我有一个.net应用程序,它可以在32位环境中运行,并且可以在wow64环境中以64位操作系统运行。

现在我正在创建一个实用程序(32位)来为应用程序创建转储。

我使用以下代码创建转储。

[DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType, ref MiniDumpExceptionInformation expParam, IntPtr userStreamParam, IntPtr callbackParam);

此API调用在32位操作系统中执行良好,但在64位操作系统中失败。

有人在64位操作系统中为32位应用程序创建了转储吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

确保您的MiniDumpExceptionInformation结构的结构定义上有Pack = 4。

这是我在32位和64位C#应用程序中使用的内容:

[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct MINIDUMP_EXCEPTION_INFORMATION
{
    public uint ThreadId;
    /// PEXCEPTION_POINTERS->_EXCEPTION_POINTERS*
    public IntPtr ExceptionPointers;
    [MarshalAs(UnmanagedType.Bool)]
    public bool ClientPointers;
}

但是我们总是使用匹配的体系结构(32位应用程序在32位进程上创建崩溃转储等)。