2016-10-02 89 views
0

我正在处理CLRMD库并尝试加载转储。我在这个过程和dac之间遇到了不匹配的架构。控制台应用程序,它是创建字符串数组的x86应用程序。CLRMD Architecture MisMatch

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位任务管理器来创建转储,当我加载转储我得到的架构不匹配错误。

enter image description here

dataTarget.Architecture是AMD64和PointerSize 8.

enter image description here

但是当相同的应用进程附着,dataTarget.Architecture是x86和Pointersize是4.

enter image description here

不知道这个区别。我在转储时错过了一些东西。请让我知道如何加载转储到CLRMD

在此先感谢。

回答

1

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

您必须删除抖动强制,以便您的程序也作为64位进程运行。项目“>”属性“>”生成“选项卡,将平台目标设置更改为AnyCPU,并取消选中”首选32位“复选框。重复发布配置。

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

+0

谢谢你,汉斯传承者。我正在使用任务管理器进行转储,但转储是x64转储而不是x86转储。我正在使用系统内部的procdump应用程序来使用x86dump。 – Harsha