CLRMD 架构不匹配
CLRMD Architecture MisMatch
我正在处理 CLRMD 库并尝试加载转储。我在这个过程和 dac 之间得到不匹配的架构。控制台应用程序,它是创建字符串数组的 x86 应用程序。
static void Main(string[] args)
{
string[] strArray = null;
for (int i = 0; i < 100; i++)
{
strArray = new string[100];
strArray[i] = "One";
System.Threading.Thread.Sleep(1000);
Console.WriteLine(i);
}
Console.Read();
}
我使用 32 位 TaskManager 创建了一个转储,当我加载转储时我得到了体系结构不匹配错误。
dataTarget.Architecture 是 Amd64 和 PointerSize 8。
但是当附加相同的应用程序进程时,dataTarget.Architecture 是 x86,指针大小是 4。
不知道什么时候有这个区别。我在倒垃圾时是不是漏掉了什么?请让我知道如何将转储加载到 CLRMD
提前致谢。
这是一个非常直接的不匹配,您的程序作为 32 位进程运行,但小型转储是从 64 位进程创建的。 DAC不支持混音
您必须删除抖动强制,这样您的程序也可以作为 64 位进程运行。 Project > Properties > Build 选项卡,将 Platform target 设置更改为 AnyCPU 并取消选中 "Prefer 32-bit" 复选框。重复发布配置。
请注意,解决方案平台名称与此设置无关,这可能是您的测试控制台应用程序原来是 64 位进程的原因,尽管您认为它是针对 x86 的。您可以使用任务管理器仔细检查,详细信息选项卡,添加 "Platform" 列。
我正在处理 CLRMD 库并尝试加载转储。我在这个过程和 dac 之间得到不匹配的架构。控制台应用程序,它是创建字符串数组的 x86 应用程序。
static void Main(string[] args)
{
string[] strArray = null;
for (int i = 0; i < 100; i++)
{
strArray = new string[100];
strArray[i] = "One";
System.Threading.Thread.Sleep(1000);
Console.WriteLine(i);
}
Console.Read();
}
我使用 32 位 TaskManager 创建了一个转储,当我加载转储时我得到了体系结构不匹配错误。
dataTarget.Architecture 是 Amd64 和 PointerSize 8。
但是当附加相同的应用程序进程时,dataTarget.Architecture 是 x86,指针大小是 4。
不知道什么时候有这个区别。我在倒垃圾时是不是漏掉了什么?请让我知道如何将转储加载到 CLRMD
提前致谢。
这是一个非常直接的不匹配,您的程序作为 32 位进程运行,但小型转储是从 64 位进程创建的。 DAC不支持混音
您必须删除抖动强制,这样您的程序也可以作为 64 位进程运行。 Project > Properties > Build 选项卡,将 Platform target 设置更改为 AnyCPU 并取消选中 "Prefer 32-bit" 复选框。重复发布配置。
请注意,解决方案平台名称与此设置无关,这可能是您的测试控制台应用程序原来是 64 位进程的原因,尽管您认为它是针对 x86 的。您可以使用任务管理器仔细检查,详细信息选项卡,添加 "Platform" 列。