Visual Studio에서 외부 클래스 라이브러리 프로젝트를 디버깅하는 방법은 무엇입니까?


137

다른 대 솔루션에있는 외부 프로젝트 (B) 클래스 라이브러리의 어셈블리를 참조하는 프로젝트 (A)가 있습니다.

프로젝트 A에서 프로그램을 실행하는 동안 B에서 클래스 라이브러리를 효율적으로 디버깅하는 방법을 아직 이해하지 못했습니다. 디버그 정보 등과 같은 프로젝트 B에서 활성화해야 할 것이 있습니까?

미리 감사드립니다.

답변:


202

JMC (Just My Code)를 비활성화하십시오.

  • 도구-> 옵션-> 디버거
  • "내 코드 만 활성화"를 선택 해제하십시오.

기본적으로 디버거는 월드 뷰를 솔루션 내에 포함 된 코드로 제한하려고합니다. 이것은 실제로는 많지만 솔루션에없는 코드를 디버깅하려면 (상황과 마찬가지로) JMC를 비활성화해야 볼 수 있습니다. 그렇지 않으면 코드는 외부 코드로 취급되며 크게보기에서 숨겨집니다.

편집하다

코드가 손상되면 다음을 시도하십시오.

  • 디버그-> Windows-> 모듈
  • 관심있는 프로젝트의 DLL을 찾으십시오.
  • 마우스 오른쪽 버튼으로 클릭-> 기호로드-> 다른 프로젝트의 .PDB 경로 선택

2
특정 확인란이 선택되어 있지 않습니다. 내가 알아 차린 것은 외부 라이브러리의 메소드에 들어가지만 인터페이스의 일부인 메소드를 호출하려고하면 단계적으로 진행된다는 것입니다.
Konstantinos

DLL 속성으로 이동하여 로컬 복사가 True로 설정되어 있는지 확인해야합니다. 그렇지 않으면 모듈이 참조를 위해 .pdb를 찾을 수 없습니다.
Bryan Rayner

내 코드 만으로는 차이가없는 것 같습니다 (활성화 된 상태에서도 외부 코드로 이동할 수 있음). 디버거에서 모듈을 찾는 것이 도움이됩니다.
TheOperator

3
이 폴더에 일치하는 기호 파일이 없습니다.
Christine

1
참조 된 모듈에 대한 PDB 파일이없는 경우 ReSharper를 사용하여 디버그 / Windows / 모듈의 오른쪽 클릭 메뉴에서 "ReSharper 디 컴파일러와 함께 심볼로드"옵션을 사용하여 바이너리를 디 컴파일 할 수 있습니다. 아주 세다.
emilast

12

이것은 얼마 동안 나를 괴롭 혔습니다. 내가 일반적으로하는 일은 디버그 모드를 사용하여 외부 라이브러리를 다시 빌드 한 다음 .dll과 .pdb 파일을 웹 사이트의 저장소에 복사하는 것입니다. 이를 통해 라이브러리 코드로 들어갈 수 있습니다.


10

경로를 가정

계획 A

C:\Projects\ProjectA

계획 B

C:\Projects\ProjectB

ProjectB의 dll은

C:\Projects\ProjectB\bin\Debug\

ProjectBfrom에서 디버그하려면 ProjectA다음을 수행하십시오.

  1. 복사 B의 DLL과 DLL의 .PDB받는 사람 ProjectA의 컴파일 디렉토리.
  2. 이제 디버그하십시오 ProjectA. 디버깅하는 동안 dll의 메서드 나 이벤트 등을 호출해야하는 부분에 코드가 도달하면을 눌러 F11dll의 코드로 들어갑니다.

참고 : .PDB 파일을 복사하지 마십시오


5

두 개의 Visual Studio 인스턴스를 실행합니다. 하나는 외부 dll과 하나는 기본 응용 프로그램입니다.
외부 dll의 프로젝트 속성에서 다음을 설정하십시오.

빌드 이벤트 :

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

디버그 :

  • 외부 프로그램을 시작하십시오 : C:\<path-to-main>\bin\debug\<AppName>.exe

  • 작업 디렉토리 C:\<path-to-main>\bin\debug

이렇게하면 외부 dll을 빌드 할 때마다 기본 응용 프로그램 디렉토리에서 업데이트됩니다. 외부 dll의 프로젝트에서 디버그를 누르면 주 응용 프로그램이 실행되지만 디버거는 외부 dll의 중단 점에만 도달합니다. 기본 프로젝트에서 디버그를 누르면 주 응용 프로그램은 가장 최근에 빌드 된 외부 dll로 실행되지만 이제는 디버거가 기본 프로젝트의 중단 점에만 도달합니다.

한 디버거가 두 가지 작업을 모두 수행한다는 것을 알고 있지만 두 가지를이 방법으로 유지하는 것이 더 쉽다는 것을 알았습니다.


1

[마틴 베켓에 따르면,이 답변을 보낸 사람은]

외부 라이브러리로 디버그 할 수 있습니다.

프로젝트 설정 탭에서 '소스 코드'필드에서 'visual studio 디렉토리'를 찾아 openCV 소스에 대한 경로를 포함하십시오. 그런 다음 각 디버그 dll의 .pdb 파일이 dll과 동일한 디렉토리에 있는지 확인하십시오.


0

프로젝트 (B)의 중단 점이 맞지 않아 비슷한 문제가 발생했습니다. 내 솔루션은 dll을 업데이트해야 할 때 프로젝트 (B)를 다시 빌드 한 다음 프로젝트 (A)를 디버그하는 것이 었습니다.

Visual Studio를 사용하면 외부 라이브러리로 디버깅 할 수 있습니다.


0

NuGet 참조

NuGet 패키지에 의해 -Project_A (project_a.dll 생성) -Project_B (project_b.dll 생성) 및 Project_B에 대한 Project_A 참조를 가정 한 다음 project_a.dll, project_a.pdb를 Project_B / Packages 폴더에 복사하십시오. 실제로는 / bin에 복사해야합니다.

이제 Project_A를 디버깅하십시오. 디버깅하는 동안 dll의 메서드 나 이벤트 등을 호출해야하는 부분에 코드가 도달하면 F11을 눌러 dll의 코드로 들어갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.