2012-01-10 3 views
2

우리는 C/C++/MFC 데스크톱 응용 프로그램을 제공하며 일부 C++/CLI 어셈블리를 사용하여 일부 관리되는 코드 기능에 액세스 할 수 있습니다. 앱이 시작 모드에서 메시지와 함께 만 해제됩니다.혼합 코드 응용 프로그램의 시작 문제 디버깅

처리되지 않은 예외 유형이 'System.TypeInitializationException'인 경우 처리되지 않은 예외가 알 수없는 모듈에서 발생했습니다. 추가 정보 : ''의 형식 초기화 프로그램에서 예외가 발생했습니다.

이 시나리오를 디버깅하는 방법과 관리되는 코드 또는 관리되지 않는 코드를 혼합 할 때의 문제점은 무엇입니까? 놀이를 멋지게하기 위해 어떤 특별한 조치를 취해야합니까?

+3

디버그 -> 예외로 이동하고 공용 언어 런타임 예외에 대해 "예외"를 선택하십시오. –

+0

또한 디버거와 연결하면 혼합 모드 디버깅 (기본 및 관리)을 사용하고 있는지 확인하십시오. 디버거에서 시작하는 경우 설정은 프로젝트 속성 -> 구성 속성 -> 디버깅 -> 디버거 유형입니다. 연결하는 경우 지정할 수있는 "선택"단추가있는 "연결 대상"이 있습니다. BTW, .NET 4 또는 .NET 2를 사용하고 있습니까? –

+0

이 문제는 릴리스 모드에서만 나타납니다. –

답변

0

의심되는 것들 :

관리되지 않는 DLL이 누락되었습니다. Depends (Sysinternals의 Depends)를 사용하고 프로파일 링을 시작할 수는 있지만 혼합 모드에서 좋은 결과를 얻으려고 노력했습니다.

동일한 종속성이있는 기본 최소 테스트 장치를 만들고 Depends를 통해 실행합니다. 누락 된 DLL에 대한 확실한 정보를 얻을 수 있습니다.

릴리스 빌드 제품에서 난독 화를 사용하고 있습니까? 우리가 사용하는 난독 화 소프트웨어는 평가 모드에서 필드에 필드를 추가합니다. 우리는 오프셋 구조체를 고정했지만, 새로운 필드는 명시적인 오프셋을 갖지 않습니다. 이 코드는 컴파일시에 우리 코드에 있던 오류 일뿐입니다. obfuscator가 동적으로 어셈블리를 패치하므로 CLR에는 옵션이 없지만 런타임에 잘못된 형식을로드하지 못합니다.

0

내 생각에 (내가 가진 몇 가지 문제를 기반으로) Matt Smith의 의견이 가장 유용한 답변입니다. 실제로 모든 예외 유형에 대해 'Thrown'을 선택하십시오. 아주 종종 문제는 전역 객체의 생성자에서의 충돌입니다. 모든 슬로우 체크 박스를 ON> 예외 및 확인 -

클릭 디버그 :도 (다른 것들 사이)라고

http://www.codeproject.com/Questions/67419/The-type-initializer-for-threw-an-exception

에서 5 대답을 참조하십시오. 이 은 모든 첫 번째 예외에서 디버거가 중지되도록하고 은 이 표시되는 Type Initializer 오류에서 오류를 찾는 데 도움이됩니다. 내 어셈블리와 관련이 있다면 은 Microsoft의 어셈블리 바인딩 로그 뷰어 도구를 사용하여 을 확인할 수 있습니다.

관련 문제