2016-10-02 76 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