2013. 5. 7. 05:47

DisconnectedContext 디버그 메시지 처리하기

T-Set 의 Plugin 을 C# AcitveX 로 작성하면 아주 가끔 다음의 오류메시지를 접하게 됩니다. 


"Managed Debugging Assistant 'DisconnectedContext' has detected a problem in 'C:\Program Files\T-Set\T-Set.exe'."





"DisconnectedContext" 와 관련해서 MSDN 에 찾아보면, COM 이 해제된 상태에서 접근되었기 때문에 COM 의 구성요소를 응용 프로그램이 완전히 종료될 때까지 컨텍스트가 종료되지 않도록 해야 된다고 하는데 이게 풀기가 쉽지가 않습니다. 그리고 디버깅중에 이 메시지 박스를 보일 뿐이지 릴리즈 후에 실제로 문제로 이어지는 경우는 보지 못했습니다. MSDN 의 런타임 효과에도 아래처럼 명시되어 있습니다.


런타임 효과

  이 MDA는 CLR에 아무런 영향을 주지 않습니다. 연결이 끊어진 컨텍스트에 대한 데이터만 보고합니다.


  ☞ '이 MDA' 는 DisconnectedContext 를 말합니다.


참고: http://msdn.microsoft.com/ko-kr/library/2c1czate(v=vs.80).aspx


자 이제 이 메시지 박스만 디버깅중에 보이지 않게 하면 될 것 같습니다. 그 방법을 소개하면 아래의 2 단계의 설정이 필요합니다. 


1. MDA 활성화


  • 레지스트리 키를 이용한 방법
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"

위 레지스트리 값을 설정해 줍니다. 레지스트리 편집기를 이용하거나 위 내용을 복사한 후, .reg 파일에 넣고 더블클릭을 해서 추가할 수도 있습니다.

  • 환경변수를 이용한 방법

COMPLUS_MDA=1


위 환경변수를 시스템에 추가해 줍니다. 추가 후에는 Visual Studio 를 재시작 해주어야 합니다.


2. T-Set MDA 구성 설정


T-Set.exe 가 있는 위치에 T-Set.exe.mda.config 파일을 생성하고, 아래 내용을 추가합니다.


<mdaConfig>
  <assistants>
    <disconnectedContext enable="false" />
  </assistants>
</mdaConfig>

[아래 그림 참고]




이렇게 한 후, 디버깅을 하면 귀찮은 "DisconnectedContext" 디버그 메시지가 보이지 않게 됩니다.


참고: http://msdn.microsoft.com/ko-kr/library/d21c150d.aspx