다음을 통해 공유


Visual Studio의 DLL 디버그(C#, C++, Visual Basic, F#)

DLL(동적 연결 라이브러리)은 둘 이상의 앱에서 사용할 수 있는 코드와 데이터를 포함하는 라이브러리입니다. Visual Studio를 사용하여 DLL을 생성, 빌드, 구성 및 디버그할 수 있습니다.

DLL 만들기

다음 Visual Studio 프로젝트 템플릿은 DLL을 만들 수 있습니다.

  • C#, Visual Basic 또는 F# 클래스 라이브러리
  • C# 또는 Visual Basic Windows Forms 컨트롤(WCF) 라이브러리
  • C++ DLL(동적 연결 라이브러리)

자세한 내용은 MFC 디버깅 기술을 참조하세요.

WCF 라이브러리는 클래스 라이브러리와 비슷한 방법으로 디버깅할 수 있습니다. 자세한 내용은 Windows Forms 컨트롤을 참조하세요.

일반적으로 다른 프로젝트에서 DLL을 호출합니다. DLL 구성에 따라 호출 프로젝트를 디버그할 때 DLL 코드를 한 단계씩 실행하고 디버그할 수 있습니다.

DLL 디버그 구성

Visual Studio 프로젝트 템플릿을 사용하여 앱을 만들면 Visual Studio에서는 디버그 및 릴리스 빌드 구성에 필요한 설정을 자동으로 만듭니다. 필요한 경우 이 설정을 변경할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

C++DebuggableAttribute 설정

디버거를 C++ DLL에 연결하려면 C++ 코드가 DebuggableAttribute를 내보내야 합니다.

DebuggableAttribute를 설정하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 C++ DLL 프로젝트를 선택하고 속성 아이콘을 선택하거나 프로젝트를 마우스 오른쪽 단추로 클릭하여 속성을 선택합니다.

  2. 속성 창의 링커>디버깅에서 디버깅 가능 어셈블리에 대해 예(/ASSEMBLYDEBUG)를 선택합니다.

자세한 내용은 /ASSEMBLYDEBUG를 참조하세요.

C/C++ DLL 파일 위치 설정

외부 DLL을 디버그하려면 호출 프로젝트에서 DLL, 해당 .pdb 파일 및 DLL에 필요한 다른 모든 파일을 찾을 수 있어야 합니다. 사용자 지정 빌드 작업을 만들어 이러한 파일을 <프로젝트 폴더>\Debug 출력 폴더에 복사하거나 파일을 수동으로 복사할 수 있습니다.

C/C++ 프로젝트의 경우 출력 폴더에 복사하는 대신 프로젝트 속성 페이지에서 헤더 및 LIB 파일 위치를 설정할 수 있습니다.

C/C++ 헤더 및 LIB 파일 위치를 설정하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 C/C++ DLL 프로젝트를 선택하고 속성 아이콘을 선택하거나 프로젝트를 마우스 오른쪽 단추로 클릭하여 속성을 선택합니다.

  2. 속성 창의 맨 위에 있는 구성에서 모든 구성을 선택합니다.

  3. C/C++>일반>추가 포함 디렉터리에서 헤더 파일이 있는 폴더를 지정합니다.

  4. 링커>일반>추가 라이브러리 디렉터리에서 LIB 파일이 있는 폴더를 지정합니다.

  5. 링커>입력>추가 종속성에서 LIB 파일의 전체 경로와 파일 이름을 지정합니다.

  6. 확인을 선택합니다.

C++ 프로젝트 설정에 대한 자세한 내용은 Windows C++ 속성 페이지 참조를 참조하세요.

디버그 버전 빌드

디버깅을 시작하기 전에 DLL의 디버그 버전을 빌드해야 합니다. DLL을 디버그하려면 호출 앱에서 해당 .pdb 파일 및 DLL에 필요한 다른 모든 파일을 찾을 수 있어야 합니다.

사용자 지정 빌드 작업을 만들어 DLL 파일을 <호출 프로젝트 폴더>\Debug 출력 폴더에 복사하거나 파일을 수동으로 복사할 수 있습니다.

올바른 위치에서 DLL을 호출해야 합니다. 이는 명확하게 보일 수 있지만 호출 앱이 DLL의 다른 복사본을 찾아 로드하는 경우 디버거는 설정한 중단점에 도달하지 않습니다.

DLL 디버그

DLL을 직접 실행할 수 없습니다. 일반적으로 .exe 파일인 앱으로 호출해야 합니다. 자세한 내용은 Visual Studio 프로젝트 - C++를 참조하세요.

DLL을 디버그하려면 해당 호출 앱을 지정하여 호출 앱에서 디버깅을 시작하거나 DLL 프로젝트에서 디버그할 수 있습니다. 호출 앱을 사용하지 않고 디버거 직접 실행 창을 사용하여 디자인 타임에 DLL 함수 또는 메서드를 평가할 수도 있습니다.

자세한 내용은 디버거 소개를 참조하세요.

호출 앱에서 디버깅 시작

DLL을 호출하는 앱은 다음과 같을 수 있습니다.

  • DLL과 동일하거나 다른 솔루션에 있는 Visual Studio 프로젝트의 앱입니다.
  • 테스트 컴퓨터나 프로덕션 컴퓨터에 이미 배포되어 실행 중인 기존 앱입니다.
  • 웹에 위치하며 URL을 통해 액세스합니다.
  • DLL을 포함하는 웹 페이지가 있는 웹앱입니다.

호출 앱에서 DLL을 디버그하려면 다음을 수행하면 됩니다.

  • 호출 앱용 프로젝트를 열고 디버그>디버깅 시작 을 선택하거나 F5를 눌러 디버깅을 시작합니다.

    또는

  • 테스트 컴퓨터나 프로덕션 컴퓨터에 이미 배포되어 실행 중인 앱에 연결합니다. 웹 사이트 또는 웹앱의 DLL에 이 방법을 사용합니다. 자세한 내용은 방법: 실행 중인 프로세스에 연결을 참조하세요.

호출 앱에 대한 디버깅을 시작하기 전에 DLL에 중단점을 설정합니다. 중단점 사용을 참조하세요. DLL 중단점에 도달하면 각 줄의 작업을 확인하면서 코드를 단계별로 실행할 수 있습니다. 자세한 내용은 디버거에서 코드 탐색을 참조하세요.

디버깅하는 동안 모듈 창을 사용하여 앱이 로드하는 DLL 및 .exe 파일을 확인할 수 있습니다. 디버깅 중에 모듈 창을 열려면 디버그>Windows>모듈을 선택합니다. 자세한 내용은 방법: 모듈 창을 참조하세요.

즉시 실행 창 사용

직접 실행 창을 사용하여 디자인 타임에 DLL 함수 또는 메서드를 평가할 수 있습니다. 직접 실행 창은 호출 앱의 역할을 수행합니다.

참고 항목

대부분의 프로젝트 형식에서 디자인 타임에 직접 실행 창을 사용할 수 있습니다. SQL, 웹 프로젝트 또는 스크립트에 대해서는 지원되지 않습니다.

예를 들어 클래스 Class1에서 Test라는 메서드를 테스트하려면 다음을 수행합니다.

  1. DLL 프로젝트가 열려 있는 상태에서 디버그>Windows>직접 실행을 선택하거나 Ctrl+Alt+I를 눌러 즉시 실행 창을 엽니다.

  2. 직접 실행 창에 다음 C# 코드를 입력하고 Enter를 눌러 Class1 형식의 개체를 인스턴스화합니다. 구문을 적절하게 변경하면 이 관리 코드는 C# 및 Visual Basic에서 작동합니다.

    Class1 obj = new Class1();
    

    C#에서 모든 이름은 정규화되어야 합니다. 언어 서비스에서 식을 평가하려고 할 때 모든 메서드나 변수는 현재 범위와 컨텍스트에 있어야 합니다.

  3. Test 에서 int 매개 변수 하나를 사용하는 것으로 가정하고 Test 직접 실행 창을 사용하여 를 실행합니다.

    ?obj.Test(10);
    

    직접 실행 창에 결과가 출력됩니다.

  4. 중단점을 배치한 다음, 함수를 다시 실행하여 Test를 계속 디버깅할 수 있습니다.

    중단점에 도달하면 Test를 단계별로 실행할 수 있습니다. 실행이 Test를 벗어나면 디버거가 디자인 모드로 되돌아갑니다.

혼합 모드 디버깅

관리 코드 또는 네이티브 코드로 DLL에 대한 호출 앱을 작성할 수 있습니다. 네이티브 앱이 관리형 DLL을 호출하고 둘 다 디버그하려는 경우 프로젝트 속성에서 관리 디버거와 네이티브 디버거를 모두 사용하도록 설정할 수 있습니다. 정확한 프로세스는 DLL 프로젝트에서 디버깅을 시작할지 또는 호출 앱 프로젝트에서 디버깅을 시작하는지에 따라 달라집니다. 자세한 내용은 방법: 혼합 모드에서 디버깅을 참조하세요.

관리형 호출 프로젝트에서 네이티브 DLL을 디버그할 수도 있습니다. 자세한 내용은 관리 및 네이티브 코드를 디버그하는 방법을 참조하세요.