我有一个 .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 位应用程序创建了转储?请帮助。
最佳答案
确保 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 位应用程序等)
关于windbg - 创建在 64 位操作系统中运行的 32 位进程的小型转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017364/