기본 콘텐츠로 건너뛰기

DLL 프로젝트 디버깅

출처: http://msdn.microsoft.com/ko-kr/library/ms164704(v=vs.80).aspx


여러 Visual Studio 프로젝트 템플릿에서 DLL이 작성되고 이러한 DLL은 독립 실행형 응용 프로그램과는 다른 방식으로 디버깅됩니다. DLL 디버깅은 독립 실행형 응용 프로그램 디버깅과 매우 비슷합니다.
DLL을 만드는 템플릿은 다음과 같습니다.
  • (C++): MFC ActiveX 컨트롤
    ActiveX 컨트롤은 인터넷을 통해 클라이언트 컴퓨터에 다운로드하여 웹 페이지에 표시 및 활성화할 수 있는 컨트롤입니다.
    독립적으로 실행할 수 없고 HTML 웹 페이지에 포함되어야 한다는 점에서 이러한 컨트롤을 디버깅하는 방식은 다른 종류의 컨트롤을 디버깅하는 방식과 비슷합니다. 자세한 내용은 How to: Debug an ActiveX Control을 참조하십시오.
  • (C++): MFC DLL
    자세한 내용은 MFC Debugging Techniques을 참조하십시오.
  • (C++): MFC ISAPI 확장 DLL
  • (C++): ATL 프로젝트
    자세한 내용은 ATL Debugging Techniques을 참조하십시오.
  • (C++): 클래스 라이브러리
  • (C++): Windows 컨트롤 라이브러리
    Windows 컨트롤 라이브러리는 클래스 라이브러리 프로젝트와 비슷한 방법으로 디버깅할 수 있습니다. 대부분의 경우에 다른 프로젝트에서 Windows 컨트롤을 호출하게 됩니다. 따라서 호출하는 프로젝트를 디버깅할 때 Windows 컨트롤의 코드를 단계별로 실행하고, 중단점을 설정하고, 다른 디버깅 작업을 수행할 수 있습니다. 자세한 내용은 Windows Forms 컨트롤을 참조하십시오.
  • (C#, J# 및 Visual Basic): 클래스 라이브러리
  • (C#, J# 및 Visual Basic): Windows 컨트롤 라이브러리
  • (C#, J# 및 Visual Basic): 웹 컨트롤 라이브러리
    자세한 내용은 웹 컨트롤 라이브러리(관리 코드)를 참조하십시오.
이 단원에서는 다음 항목에 대한 정보도 제공합니다.
이 항목의 다음 단원에서는 클래스 라이브러리에 대한 디버깅을 준비할 때 고려해야 할 사항에 대해 설명합니다.

디버그 버전 빌드

어떤 방법으로 디버깅을 시작하든지 먼저 DLL의 디버그 버전을 빌드하여 응용 프로그램에서 검색할 위치에 저장해야 합니다. 만약 이 단계를 생략하면 응용 프로그램에서는 다른 DLL 버전을 찾아서 로드할 수 있습니다. 그러면 프로그램은 계속 실행되지만 중단점에는 도달하지 않습니다. 디버깅 작업을 수행할 때 디버거의 모듈 창을 열어 프로그램에서 로드한 DLL을 확인할 수 있습니다. 모듈 창에는 디버깅 중인 프로세스에서 로드한 각 DLL 또는 EXE가 표시됩니다. 자세한 내용은 방법: 모듈 창 사용을 참조하십시오.
디버거에서 C++로 작성된 코드에 연결하려면 코드에 DebuggableAttribute가 있어야 합니다. 이 특성은 /ASSEMBLYDEBUG 링커 옵션으로 링크하여 자동으로 코드에 추가할 수 있습니다.

혼합 모드 디버깅

DLL을 호출하는 호출 응용 프로그램은 관리 코드로 작성될 수도 있고 네이티브 코드로 작성될 수도 있습니다. 네이티브 코드가 관리되는 DLL을 호출하고 두 코드를 모두 디버깅해야 하는 경우에는 관리되는 디버거와 네이티브 디버거를 모두 활성화해야 합니다. <Project> 속성 페이지 대화 상자나 창에서 이를 확인할 수 있습니다. 이를 수행하는 방법은 DLL 프로젝트에서 디버깅을 시작하는지 아니면 호출하는 응용 프로그램 프로젝트에서 디버깅을 시작하는지에 따라 달라집니다. 자세한 내용은 방법: 혼합 모드에서 디버깅을 참조하십시오.

기본 구성 변경

프로젝트 템플릿을 사용하여 콘솔 응용 프로그램 프로젝트를 만들면 Visual Studio에서는 디버그 및 릴리스 구성에 필요한 설정을 자동으로 만듭니다. 필요하면 이 설정을 변경할 수 있습니다. 자세한 내용은 C++ 디버그 구성에 대한 프로젝트 설정C# 및 J# 디버그 구성에 대한 프로젝트 설정Visual Basic 디버그 구성에 대한 프로젝트 설정 및 방법: 디버그 및 릴리스 구성 설정을 참조하십시오.

DLL 디버깅 방법

이 단원의 각 프로젝트에서는 DLL을 만듭니다. DLL은 직접 실행할 수 없습니다. DLL은 일반적으로 EXE와 같은 응용 프로그램에서 호출해야 합니다. 자세한 내용은 Visual C++ 프로젝트 만들기 및 관리를 참조하십시오. 다음과 같은 응용 프로그램에서 호출할 수 있습니다.
  • 동일한 Visual Studio 솔루션에서 클래스 라이브러리를 포함한 다른 프로젝트에 내장된 응용 프로그램
  • 테스트용 컴퓨터나 프로덕션 컴퓨터에 이미 설치된 기존 프로그램
  • 웹에 설치되어 URL을 통해 액세스할 수 있는 응용 프로그램
  • DLL을 포함하는 웹 페이지가 들어 있는 웹 응용 프로그램

호출 응용 프로그램 디버깅

DLL을 디버깅하려면 호출 응용 프로그램 디버깅을 먼저 시작해야 합니다. 호출 응용 프로그램은 일반적으로 EXE 또는 웹 응용 프로그램입니다. 이를 디버깅하는 데는 여러 가지 방법이 있습니다.
  • 호출 응용 프로그램에 대한 프로젝트가 있으면 이 프로젝트를 열고 디버그 메뉴에서 실행 파일을 시작할 수 있습니다. 자세한 내용은 방법: 실행 시작을 참조하십시오.
  • 호출 응용 프로그램이 테스트 컴퓨터나 프로덕션 컴퓨터에 이미 배포되어 실행되고 있는 기존의 프로그램인 경우 이 응용 프로그램에 연결할 수 있습니다. DLL이 Internet Explorer로 호스팅된 컨트롤이거나 웹 페이지의 컨트롤인 경우 이 방법을 사용합니다. 자세한 내용은 방법: 실행 중인 프로세스에 연결을 참조하십시오.
  • DLL 프로젝트에서 이를 디버깅할 수 있습니다. 자세한 내용은 방법: DLL 프로젝트에서 디버깅을 참조하십시오.
  • Visual Studio 직접 실행 창에서 이를 디버깅할 수 있습니다. 이 경우 직접 실행 창은 응용 프로그램 역할을 수행합니다.
호출 응용 프로그램에 대한 디버깅을 시작하기 전에, 일반적으로 클래스 라이브러리에 중단점을 설정합니다. 자세한 내용은 중단점 및 추적점을 참조하십시오. 중단점에 도달하면 각 줄의 작업을 확인하면서 코드를 단계별로 실행하여 문제를 해결할 수 있습니다. 자세한 내용은 한 단계씩 코드 실행 개요를 참조하십시오.

웹 페이지의 컨트롤

웹 페이지 컨트롤을 디버깅하려면, 컨트롤을 포함하는 페이지가 없는 경우 컨트롤을 포함하는 ASP.NET 페이지를 만듭니다. 그런 다음 컨트롤 코드 및 웹 페이지 코드에 중단점을 배치합니다. 중단점을 설정한 후 Visual Studio에서 웹 페이지를 호출합니다.
호출 응용 프로그램에 대한 디버깅을 시작하기 전에, 일반적으로 DLL에 중단점을 설정합니다. 중단점에 도달하면 각 줄의 작업을 확인하면서 코드를 단계별로 실행하여 문제를 해결할 수 있습니다. 자세한 내용은 중단점 및 추적점 및 한 단계씩 코드 실행 개요를 참조하십시오.

직접 실행 창

직접 실행 창을 사용하여 디자인 타임 디버깅을 수행하면 호출 응용 프로그램이 없어도 DLL의 함수나 메서드를 실행할 수 있습니다. 이러한 방식으로 디버깅하려면 DLL 프로젝트가 열려 있는 상태에서 다음을 수행합니다.
  1. 디버거 직접 실행 창을 엽니다.
  2. Class1의 Test라는 메서드를 테스트하려면 직접 실행 창에 다음 C# 코드를 입력하여 Class1 형식의 개체를 인스턴스화합니다. 구문을 적절하게 변경하면 다른 관리되는 언어(VB, J#, C++)에도 이 절차를 적용할 수 있습니다.
        Class1 obj = new Class1();
    
    C#에서 모든 이름은 정규화되어야 합니다. 또한 모든 메서드나 변수는 디버깅 세션의 현재 범위와 컨텍스트에 있어야 합니다.
  3. Test에서 int 매개 변수 하나를 사용하는 것으로 가정하고 직접 실행 창을 사용하여 Test를 실행합니다.
       ?obj.Test(10)
    
    직접 실행 창에 결과가 출력됩니다.
  4. Test 내에 중단점을 배치한 다음 함수를 다시 실행하여 이 메서드를 계속 디버깅할 수 있습니다.
       ?obj.Test(10);
    
    중단점에 도달하면 Test를 단계별로 실행할 수 있습니다. Test 실행을 마치면 디버거가 디자인 모드로 되돌아갑니다.

참고 항목



댓글

이 블로그의 인기 게시물

이클립스 실행 오류와 eclipse.ini 수정

1. 실행시 Java was started but returned exit code=13 에러가 날때 --> Win7 64bit를 사용중인데, 이 오류가 발생하고 있었습니다. 제가 자바도 이클립스용도 32비트 버젼을 사용중이었는데, 자바만 64비트용으로 설치를 했더니, 생긴 문제였습니다. 이클립스 64비트를 설치하시면 해결됩니다. 2.이클립스 폴더내 eclipse.ini 기본값(보통 아래 처럼 되어 있습니다.) -startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810 -product org.eclipse.epp.package.jee.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m 3.실행하자 마자 javaw.exe 찾기 실패시  --> jdk가 설치된 경로(javaw.exe가 있는 경로)를 추가해준다. 맨 아래쪽에 삽입하니 안되더군요.(왜죠?) -vmargs 윗부분에 삽입했습니다. 다른 블로그님 들 글에선 open 위쪽에 쓰니 괜찮다는 글도 있으니 참고하세요. -vm c:\Program Files\java\jre6\bin\javaw.exe 4.이클립스 속도 향상을 위한 추가값 출처:  http://blog.naver.com/sungback/90097516641 검색도중 이클립스 속도 향상 정보를 발

[c#.net] WPF 사용 중 xaml관련 실행시 오류 와 대처 방법

wpf 사용 중 xaml관련 실행시 오류 가 발생해서 자그마치 2일을 소비 했다..--;; 오류 내용은 아래와 같다. ================================== 'System.Windows.Markup.XamlParseException' 형식의 첫째 예외가 PresentationFrameWork.dll에서 발생했습니다. 추가 정보: '지정된 바인딩 제약 조건과 일치하는 'PapaZone.MainWindow' 형식에 대한 생성자 호출에서 예외가 throw 되었습니다.' 줄 번호 '21' 및 줄 위치 '9' 이 예외에 대한 처리기가 있으면 프로그램을 안전하게 계속할 수 있습니다. [] 이 예외 형식이 throw되면 중단 ================================== 위 Xaml 오류 메세지만으로는 내용 추적 불가하여, 도대체 뭔가 했다. 검색해도 뚜렷한 답변은 없었지만, 여러가지 의견을 종합해 보면 아래와 같다. 1. xmlns 관련 파일 과 관련된 파일 로딩 실패 이거나, 2. 신규로 추가된 namespace 에 속한 태그 사용시 오류로 판단되어 태그 하나씩 삽입하며 테스트 해봐야 한다고 함. 해결한 지금에 원인을 보면, xaml 에서 clr-namespace 로 추가된 항목들이 로딩에 실패해서 발생한 것이며, 추가된 항목은 있었으나, 이것과 연결된 파일이 없어서 로딩되지 않는 것이 문제였다. 오늘도 즐거운 하루~~

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법 내부 오류 추적 결과 다음과 같이 나옴. [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다. SqlState : 08001, NativeError : 10061 오류 원인과 처리 1.SQL 서버 로그인 계정 틀린 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속 '로그인' 사용할 계정의 아이디/암호 확인 2.TCP/IP 접속 권한이 없는 경우 -> A.SQL Server 구성 관리자를 실행에서 TCP/IP 허용 되어 있는지 확인 B. 서비스 포트 값이 (보통 1433) 맞는지 확인 C. 외부에서 접속하는 경우에는 방화벽 허용 되엉 있는지 확인 C. 서비스 재시작 3.Windows 인증 모드만 허용 인 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속하고, 우클릭 하여 속성 정보 확인해서 B.연결에서 인증모드 '로그인' 사용할 계정의 아이디/암호 확인 4.'exec Sp_ReadErrorLog' 명령어를 사용해서, 로그인 실패 로그를 확인해서 원인을 분석한다.