IT박스

참조 된 DLL을 디버깅하는 방법 (pdb 사용)

itboxs 2020. 7. 14. 20:55
반응형

참조 된 DLL을 디버깅하는 방법 (pdb 사용)


내 작업 공간에는 A와 B의 두 가지 솔루션이 있습니다.

솔루션 A는 얼마 전에 코딩을 마친 오래된 프로젝트입니다. 솔루션 B에서는 솔루션 A의 일부 클래스를 사용해야합니다. 그렇게하려면 솔루션 A의 프로젝트 중 하나의 dll에 대한 참조를 추가합니다.

문제는 디버깅하려고 할 때입니다. A의 코드로 들어갈 수 있기를 원합니다. Visual Studio는 이러한 클래스에 대한 코드를로드 할 수 없으며 ( "현재 위치에 사용할 수있는 소스 코드가 없습니다.") 디스 어셈블리 만 볼 수 있으므로 유용하지 않습니다.

솔루션 A에서 클래스를 디버깅하는 유일한 방법은 솔루션 B를 실행하고 모든 프로세스를 분리하고 (디버그 메뉴 항목에서) 솔루션 A에서 프로세스를 연결하는 것입니다.

그러나 이것은 매우 불편하며 한 번에 A OR B 만 디버깅 할 수 있습니다.

참조 된 dll 코드로 스테핑 할 수있는 방법이 있습니까 (소스 코드가 있습니까)?


솔루션 : 실수는 프로젝트가 단일 솔루션의 일부일 수 있다고 생각했습니다. 실제로 프로젝트는 여러 솔루션의 일부가 될 수 있습니다.
이전 프로젝트를 참조해야 할 경우 간단히 프로젝트를 솔루션에 추가해야합니다. 솔루션 탐색기> 추가> 기존 프로젝트에서 새 솔루션을 마우스 오른쪽 버튼으로 클릭하면됩니다.
그런 다음 프로젝트 참조를 추가 할 수 있습니다. 다른 사람들이 작성한 것처럼 자신의 코드 (또는 변경하고 디버그 해야하는 다른 코드)에 대한 dll 참조를 사용하지 않아야합니다.

솔루션 디자인 방법에 대한 아주 좋은 참고 자료는 MSDN 에서 찾을 수 있습니다 .


프로젝트 참조 가 있으면 즉시 작동합니다.

그것은 경우 파일 (DLL) 참조, 당신은 디버깅 심볼 (이하 "PDB"파일)이 dll을 같은 폴더에 있어야합니다. 프로젝트가 디버그 기호를 생성하는지 확인하십시오 (프로젝트 속성 => 빌드 => 고급 => 출력 / 디버그 정보 = 전체). 그리고 dll 복사 했다면 pdb를 넣으십시오.

파일을 복사하지 않으려는 경우 IDE에서 직접 기호를로드 할 수도 있지만 더 효과적입니다.

가장 쉬운 옵션은 프로젝트 참조를 사용하는 것입니다!


나는 같은 문제가 있었다. 그는 내가 찾은 것입니다 :

1) 모든 프로젝트가 동일한 프레임 워크를 사용하고 있는지 확인하십시오 (이것은 중요합니다!)

2) 도구 / 옵션> 디버깅> 일반에서 "내 코드 만 활성화 (관리 전용)가 선택되어 있지 않은지 확인하십시오.

3) 도구 / 옵션> 디버깅> 기호에서 캐시 된 기호를 지우고 기본 "Microsoft Symbol 서버"를 제외한 "기호 파일 (.pdb) 위치"목록 상자 아래의 모든 폴더 위치를 선택 취소하고 여전히 선택 해제하십시오. "이 디렉토리의 캐시 기호"텍스트 상자에서 정적 경로도 삭제하십시오. "빈 심볼 캐시"버튼을 클릭하십시오. 마지막으로 "지정된 모듈 만"라디오 버튼이 선택되어 있는지 확인하십시오.

4) 모든 프로젝트의 Build / Configuration Manager 메뉴에서 구성이 디버그 모드인지 확인하십시오.


명심해야 할 또 다른 사항은 참조 된 dll이 GAC에 설치되어 있지 않은지 확인하십시오. 테스트 후 시스템 수준 테스트를 수행하기 위해 dll을 GAC에 설치했습니다. 나중에 코드를 다시 디버깅해야 할 때 GAC에서 삭제하기 전까지는 참조 된 어셈블리를 사용할 수 없었습니다.


1 단계 : 로 이동 도구 -> 옵션 -> 디버깅

2 단계 : 내 코드 만 활성화를 선택 취소합니다

3 단계 : 원본 파일이 원본 버전과 정확히 일치해야 함을 선택 취소합니다

4 단계 : 속성 및 연산자에 대한 단계 해제를 선택 취소하십시오 .


참조 된 dll의 소스 코드에 중단 점을 설정하려면 먼저 pdb 파일을 사용할 수 있는지 확인하십시오. 그런 다음 관련 소스 코드 파일을 열고 그 위에 중단 점을 설정할 수 있습니다. 소스 파일은 솔루션의 일부일 필요는 없습니다. Visual Studio에서 참조 코드에서 중단 점을 설정하는 방법에 설명 된대로

디버그-> Windows-> 중단 점을 통해 사용 가능한 중단 점 창을 통해 중단 점을 검토 할 수 있습니다.

이 접근법은 기존 프로젝트를 디버깅 목적으로 만 솔루션에 기존 프로젝트를 추가 할 필요가 없다는 이점이 있습니다. 분명히 하나의 프로젝트로 솔루션을 구축하는 것이 많은 솔루션을 구축하는 것보다 훨씬 빠릅니다.


I had the *.pdb files in the same folder and used the options from Arindam, but it still didn't work. Turns out I needed to enable Enable native code debugging which can be found under Project properties > Debug.


I don't want to include an external class library project in some of my solutions, so I step into assemblies that I consume in a different way.

My solutions have a "Common Assemblies" directory that contains my own DLLs from other projects. The DLLs that I reference also have their accompanying PDB files for debugging.

In order to debug and set breakpoints, I set a breakpoint in the consuming application's source where I'm calling a method or constructor from the assembly and then step INTO (F11) the method/constructor call.

The debugger will load the assembly's source file in VS and new breakpoints inside of the assembly can be set at that point.

It's not straight forward but works if you don't want to include a new project reference and simply want to reference a shared assembly instead.


It must work. I used to debug a .exe file and a dll at the same time ! What I suggest is 1) Include the path of the dll in your B project, 2) Then compile in debug your A project 3) Control that the path points on the A dll and de pdb file.... 4)After that you start in debug the B project and if all is ok, you will be able to debug in both projects !


Make sure your DLL is not registered in the GAC. Visual Studio will use the version in the GAC and it will probably have no debugging information.

참고URL : https://stackoverflow.com/questions/1130417/how-to-debug-a-referenced-dll-having-pdb

반응형