hoony's web study

728x90
반응형

MDA Error

열심히 C#으로 프로그램을 하다가 디버깅을 하는데 갑자기 이런 오류가 생성이 되네요.
흠.
mda란 무엇인지 일단 찾아보았습니다.
웹에서 찾아보니 일단 이런저런것에 대한 내용이 많이 있으나 msdn에 있는 내용을 인용해봅니다.

MDA(관리 디버깅 도우미)는 CLR(공용 언어 런타임)와 함께 작동하여 런타임 상태 정보를 제공하는 디버깅 도우미입니다. 이 도우미는 이 경우가 아니면 트래핑할 수 없는 런타임 이벤트에 대한 정보 메시지를 생성합니다. MDA를 사용하여 관리 코드와 비관리 코드 사이에서 전환할 때 발생하는 찾기 어려운 응용 프로그램 버그를 격리할 수 있습니다. Windows 레지스트리에 키를 추가하거나 환경 변수를 설정하거나 응용 프로그램 구성 설정을 사용하여 MDA를 활성화할 수 있습니다. 응용 프로그램의 구성 파일에서 일부 개별 MDA에 대한 구성 설정을 추가로 설정할 수 있습니다. 이러한 구성 파일은 런타임을 로드할 때 구문 분석되므로 관리되는 응용 프로그램을 시작하기 전에 MDA를 활성화해야 합니다. 이미 시작한 응용 프로그램에 대해서는 MDA를 활성화할 수 없습니다.

MDA 사용 및 사용 안함

레지스트리 키, 환경 변수 또는 응용 프로그램 구성 설정을 사용하여 MDA를 활성화 및 비활성화할 수 있습니다.

레지스트리 키를 통한 활성화 및 비활성화

Windows 레지스트리에 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA 하위 키를 추가하여 MDA를 활성화할 수 있습니다. 다음 예제를 "MDAEnable.reg" 텍스트 파일에 복사합니다.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"

명령 프롬프트에서 MDAEnable.reg 파일을 실행하여 MDA를 전역으로 활성화합니다. MDA를 비활성화하려면 다음 예제를 "MDADisable.reg" 텍스트 파일에 복사합니다.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="0"


그런 다음 명령 프롬프트에서 MDADisable.reg 파일을 실행합니다.

기본적으로 일부 MDA는 레지스트리 키를 추가하지 않아도 디버거에 연결된 응용 프로그램을 실행할 때 활성화됩니다. 이러한 도우미의 예로는 PInvokeStackImbalanceInvalidApartmentStateChange가 있습니다. 위의 설명대로 MDADisable.reg 파일을 실행하여 이러한 도우미를 비활성화할 수 있습니다.

환경 변수를 통한 활성화 및 비활성화

MDA 활성화는 환경 변수 COMPLUS_MDA로도 제어할 수 있습니다. 환경 변수는 레지스트리 키를 재정의합니다. 문자열은 대/소문자를 구분하지 않고 MDA 이름 또는 기타 특수 제어 문자열의 세미콜론으로 구분된 목록입니다. 관리되거나 관리되지 않는 디버거에서 시작하면 MDA 집합이 기본적으로 활성화됩니다. 이 작업을 수행하려면 환경 변수나 레지스트리 키 값 앞에 디버거에서 기본적으로 활성화되는 세미콜론으로 구분된 MDA 목록을 암시적으로 추가합니다. 특수 제어 문자열은 다음과 같습니다.

  • 0 - 모든 MDA를 비활성화합니다.

  • 1 - ApplicationName.mda.config에서 MDA 설정을 읽습니다.

  • managedDebugger - 관리되는 실행 파일이 디버거에서 시작될 때 암시적으로 활성화된 모든 MDA를 명시적으로 활성화합니다.

  • unmanagedDebugger - 관리되지 않는 실행 파일이 디버거에서 시작될 때 암시적으로 활성화된 모든 MDA를 명시적으로 활성화합니다.

충돌하는 설정이 있으면 가장 최근 설정이 이전 설정을 재정의합니다.

  • COMPLUS_MDA=0은 디버거에서 암시적으로 활성화되는 MDA를 포함하여 모든 MDA를 비활성화합니다.

  • COMPLUS_MDA=gcUnmanagedToManagedgcUnmanagedToManaged 및 디버거에서 암시적으로 활성화되는 모든 MDA를 활성화합니다.

  • COMPLUS_MDA =0;gcUnmanagedToManagedgcUnmanagedToManaged를 활성화하지만 이 경우가 아니면 디버거에서 암시적으로 활성화될 해당 MDA를 비활성화합니다.

응용 프로그램별 구성 설정을 통한 활성화 및 비활성화

응용 프로그램의 MDA 구성 파일에서 개별적으로 일부 도우미를 활성화하고 구성할 수 있습니다. 응용 프로그램 구성 파일은 일반적으로 응용 프로그램 실행 파일(.exe)과 같은 디렉터리에 있습니다. 파일 이름은 ApplicationName.mda.config 형식(예: notepad.exe.mda.config)을 사용합니다. 응용 프로그램 구성 파일에서 활성화되는 도우미에는 특히 해당 도우미의 동작을 제어하는 데 사용되는 특성 또는 요소가 있을 수 있습니다. 다음 예제에서는 Marshaling MDA를 활성화하고 구성하는 방법을 보여 줍니다.

<mdaConfig>
  <assistants>
    <marshaling>
      <methodFilter>
        <match name="*"/>
      </methodFilter>
      <fieldFilter>
        <match name="*"/>
      </fieldFilter>
    </marshaling>
  </assistants>
</mdaConfig>

이러한 설정은 Marshaling MDA를 활성화하거나 구성하며, 이 MDA는 응용 프로그램에서 각 관리와 비관리 간 전환에 대해 관리되지 않는 형식으로 마샬링되고 있는 관리되는 형식에 대한 설명 정보를 내보냅니다. Marshaling MDA에는 각각 <methodFilter><fieldFilter> 자식 요소에서 제공하는 메서드 및 구조 필드의 이름을 필터링하는 유연한 기능이 있습니다.
각각의 설명은 이렇게 되어있는데 일단 비활성화를 하는 registry 파일을 동록해서 해보았는데
역시나 안되네요..
부팅을 다시하고 증상에 대해서 다시 올려드리도록 하겠습니다.


728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading