2016-10-02 6 views
0

CLRMD 라이브러리에서 작업 중이며 덤프를로드하려고합니다. 이 과정과 dac 사이의 아키텍처가 일치하지 않습니다. 문자열 응용 프로그램을 만드는 x86 응용 프로그램 인 콘솔 응용 프로그램.CLRMD 아키텍처 잘못된 참조

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를 사용하여 덤프를 만들었으며 덤프를로드 할 때 아키텍처 불일치 오류가 발생합니다.

enter image description here

dataTarget.Architecture는 AMD64 및 제 PointerSize

enter image description here

하지만 동일한 애플리케이션 프로세스가 부착 될 때, dataTarget.Architecture는 86이다 및 Pointersize 4.

이다 enter image description here

이 차이가 언제 발생하는지 잘 모릅니다. 내가 쓰레기를 가져갈 때 뭔가 빠졌어요. CLRMD에 덤프를로드하는 방법을 알려주십시오

감사합니다.

답변

1

매우 직선적 인 불일치로 프로그램이 32 비트 프로세스로 실행되지만 미니 덤프는 64 비트 프로세스에서 생성되었습니다. DAC는 믹싱을 지원하지 않습니다.

프로그램이 64 비트 프로세스로 실행되도록 지터를 제거해야합니다. 프로젝트> 속성> 빌드 탭에서 플랫폼 대상 설정을 AnyCPU로 변경하고 "32 비트 선호"확인란의 선택을 취소하십시오. 릴리스 구성에 대해 반복하십시오.

솔루션 플랫폼 이름이이 설정과 관련이 없으므로 테스트 콘솔 응용 프로그램이 x86을 대상으로한다고 생각했지만 64 비트 프로세스로 판명되었을 가능성이 있습니다. 작업 관리자, 세부 정보 탭에서 "플랫폼"열을 추가하여 다시 확인할 수 있습니다.

+0

감사합니다. 한스 passant. 덤프를 가져 가기 위해 작업 관리자를 사용하고 있었지만 덤프는 x64 덤프가 아니라 x86 덤프입니다. 그리고 시스템 내부에서 procdump 응용 프로그램을 사용하여 x86dump를 사용하고 있습니다. – Harsha