2011-09-19 2 views
2

Visual Studio 2010에서 작성한 C#에서 호출하는 Visual Studio 6으로 작성된 이전 DLL이 있습니다. DLL이 제대로 작동하지 않고 디버깅하려고합니다. 어떻게해야합니까? 소스 코드 프로젝트를 가지고 있지만 어떻게해야 할 지 알 수 없습니다.C#에서 호출 된 VC++ 6 DLL 디버깅

참고 : "작동하지 않는다"고 말하면 DLL 호출이 성공하고 실패하기 전에 DLL의 코드를 조금이라도 가져 오지만 정확하게 추적해야합니다.

+0

이미 시도한 바가 있습니까? 예를 들어, VS6을 연결하여 디버깅을 시도 했습니까? –

+0

VC5 디버거를 C# 응용 프로그램에 연결하려고했지만 프로세스가 빌드 -> 디버그 -> 연결 프로세스에 나타나지 않습니다. – Jonnster

답변

3

DLL을 디버깅하는 기술은 MSDN의 here에 설명되어 있습니다. Visual Studio 6 (즉, DLL을 개발 한 도구)에서이 작업을 수행해야하므로 용어가 변경됩니다. 그러나 원칙은 동일하게 유지됩니다.

+0

감사합니다. 그걸 읽은 후에 모두 나에게 돌아왔다. – Jonnster

2

.NET 프로세스에서 VS6 디버거를 연결하면 해당 바이너리와 소스가있는 PDB 파일을 가지고 있어야합니다. 그러나 DLL 코드에서만 중단 할 수 있습니다.

플래그 "Allow unmanaged debugging"이 선택되었지만 심볼이 디버거에 의해로드되지 않을 가능성이있는 경우 다른 VS +를 연결해야합니다. DLL의 재 컴파일은 마지막 문제를 해결합니다.

+0

vc6 디버거를 .NET 프로세스에 ataching하려고했지만 .NET 프로세스 (WinForms app)가 목록에 표시되지 않습니다. – Jonnster

+0

.NET 프로젝트 플랫폼을 x86으로 변경하고 다시 컴파일하고 다시 실행하십시오. – Luca

2

Visual C++ Dll 프로젝트를 열고 필요한 곳에 중단 점을 설정하십시오. 디버그 세션에 대한 프로젝트 속성, 디버그, 실행 파일에이 DLL을 사용하는 .NET 실행 파일을 입력하십시오. 디버깅을 시작하십시오 (Go). VC++ 함수가 호출되면 디버거가 중단됩니다. 이 방법을 사용하면 관리되지 않는 VC++ 코드 만 디버깅 할 수 있습니다.

또 다른 방법은 .NET 클라이언트에서 혼합 디버깅 모드로 디버깅을 시작하는 것입니다. VC++ 프로젝트를 솔루션에 추가하고 관리 코드와 관리되지 않는 코드를 모두 디버깅하도록 다시 작성하십시오.