0

我正在研究 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();
    }

我使用 32Bit TaskManager 创建转储,当我加载转储时,我收到架构不匹配错误。

在此处输入图像描述

dataTarget.Architecture 是 Amd64 和 PointerSize 8。

在此处输入图像描述

但是当附加相同的应用程序进程时,dataTarget.Architecture 为 x86,Pointersize 为 4。

在此处输入图像描述

不知道什么时候有这个区别。我在转储时是否遗漏了一些东西。请让我知道如何将转储加载到 CLRMD

提前致谢。

4

1 回答 1

2

这是一个非常直接的不匹配,您的程序作为 32 位进程运行,但 minidump 是从 64 位进程创建的。DAC 不支持混音。

您必须消除抖动强制,以便您的程序也可以作为 64 位进程运行。Project > Properties > Build 选项卡,将 Platform target 设置更改为 AnyCPU 并取消选中“Prefer 32-bit”复选框。重复发布配置。

请注意,解决方案平台名称与此设置无关,这可能是您的测试控制台应用程序结果为 64 位进程的原因,即使您认为它针对 x86。您可以仔细检查任务管理器,详细信息选项卡,添加“平台”列。

于 2016-10-06T14:24:44.087 回答