고수닷넷 - 디버깅전문가님
여러분이 아무리 훌륭한 프로그래머라고 할지라도, 한번쯤은 실수를 저지를 수 있다. 만약 적절한 도구가 없다면 코드에서 발생한 문제점들을 해결하기 어려울 수 있다. 다행스럽게도 ASP.NET이 컴파일된 파일을 이용할 때의 특징은 Web 응용 프로그램을 디버깅하는 거이 다른 managed 응용 프로그램을 디버깅하는 것과 다르지 않다는 것을 의미한다. 또한 .NET Framewor SDK는 이러한 목적을 달성하기에 충분한 가벼운 디버거를 포함하고 있다.
이 글은 SDK에서 제공하는 디버거를 사용하여 ASP.NET Framework 응용 프로그램을 디버깅하기 위해서 필요한 과정들을 설명한다. 이 디버거는 로컬 개발 컴퓨터에서의 프로세스 수동 연결 디버깅을 지원한다. SDK에 포함되어 있는 디버거 문서에서 특정한 기능에 대한 정보를 확인할 수 있다.
ASP.NET Framework 응용 프로그램의 많은 구성 요소들이 런타임시에 동적으로 컴파일되기 때문에(예를 들면, .aspx와 .asmx 파일), 여러분은 응용 프로그램을 디버깅하기 전에 반드시 해당 응용 프로그램을 심볼 정보와 함께 컴파일하도록 ASP.NET 런타임을 구성해야 한다. 심볼(.pdb 파일) 파일들은 디버거가 바이너리에 대한 원본 소스 파일을 찾고 해당 소스 파일의 코드에 있는 중단점을 매핑하기 위해서 사용한다. 심볼 정보를 갖도록 응용 프로그램을 컴파일하기 위해서는, 우선 응용 프로그램의 루트 디렉터리에 있는 Web.config 파일을 찾는다. 그리고 다음과 같이 system.web 그룹내에 있는 compilation 섹션에서 debug 특성을 포함한다.
해당 응용 프로그램에 대한 디버깅을 활성화했다면, 디버깅하고자하는 페이지에 대한 요청을 만들어야 한다. 이렇게 함으로써 ASP.NET 런타임 프로세스(Aspnet_wp.exe)가 생성되고 응용 프로그램이 메모리에 로드되도록 한다.
디버깅 시작하기 위해서는 다음 단계를 수행한다.
1. .NET Framework 디버거, DbgClr.exe(기본 위치는 C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\GuiDebug 이다)를 실행한다.
2. 디버깅하고자 하는 페이지에 대한 소스 파일을 열기 위해서 <파일>-<열기>-<파일> 메뉴를 선택한다.
3. <도구>-<프로세스 디버그> 메뉴를 선택한다. 이 메뉴를 선택하면 아래 그림과 같은 창이 표시될 것이다.
4. 만약 시스템 프로세스 표시 체크 상자를 체크되어 있지 않다면 이 체크 상자를 체크한다.
5. Aspnet_wp.exe 프로세스를 찾아서 프로세스에 연결하기 대화 상자를 띄우기 위해서 해당 프로세스를 더블 클릭한다.
6. 여러분이 작성한 응용 프로그램이 실행 응용 프로그램 목록에 표시되는지 확인하고 응용 프로그램에 연결하기 위해서 [확인]을 클릭한다.
7. 프로세스 대화 상자를 닫는다.
페이지에서 중단점을 설정하기 위해서, 실행 문이나 함수/메서드를 포함하고 있는 줄의 왼쪽 여백을 클릭한다. 중단점이 설정된 곳에 붉은 점이 나타난다. 중단점이 Aspnet_wp.exe 프로세스에 있는 정확한 응용 프로그램 인스턴스에 적절하게 매핑되었는지를 확인하기 위해서 중단점 위로 마우스를 이동시킨다.
브라우저에서 해당 페이지를 다시 요청한다. 디버거가 중단점에서 멈추고 윈도우 포커스를 얻을 것이다. 이제 프로그램을 한단계씩 실행하거나 변수 값을 살펴보고, 지역 변수를 보거나 스택 정보 및 디스어셈블리 등을 확인할 수 있다. 또한 this (C#) 또는 Me (VB)에 의해서 사용된느 Request, Reponse, 그리고 Session과 같은 객체를 조사식 창에서 살펴볼 수 있다.
비지니스 객체나 코드-비하인드 파일처럼 미리 컴파일된 컴포넌트를 디버깅하기 위해서는, 디버깅을 하기 전에 심볼릭 정보를 갖도록 컴파일해야 한다. 어셈블리에 대한 심볼은 전형적으로 경로 기반의 검색 알고리즘으로 찾는다. 심볼릭 정보를 찾기 위해서 PDB 라이브러리 (Mspdb70.dll)이 사용하는 이 알고리즘은 다음과 같다.
1. 어셈블리가 위치한 경로를 찾는다. 이 파일은 일반적으로 .pdb 파일이다. 지역 어셈블리의 경우 응용 프로그램의 /bin 디렉터리에 해당 DLL과 함께 심볼 (.pdb 파일)을 보관한다.
2. PE 파일 ( NB10 디버그 헤더)에 명시된 경로를 찾는다.
3. NT 심볼 파일 위치를 찾는다(_NT_SYMBOL_PATH와 _NT_ALT_SYMBOL_PATH 환경 변수).
알아두기 : 만약 심볼 정보를 찾을 수 없다면, 디버거는 사용자가 위치를 지정하도록 묻는다.
1. 이 글에서 설명한 디버거는 로컬 개발 컴퓨터에서 실행중인 프로세스에 대해서 수동 연결 디버깅을 지원한다.
2. 디버깅을 이용하여 ASP.NET 런타임이 동적으로 심볼 정보를 갖도록 컴파일할 수 있다. 이 기능은 응용 프로그램의 루트 디렉터리에 있는 Web.config 파일에서 <compilation debug="true"/>를 설정하여 활성화한다. 이 기능을 활성화하면 응용 프로그램의 성능이 떨어지기 때문에, 여러분이 응용 프로그램을 디버깅하고 있을 때에만 활성화되어야 한다.
3. 응용 프로그램을 디버그하기 위해서는 페이지를 요청하고 Aspnet_wp.exe 프로세스에 디버거를 연결한 후, 중단점을 설정하고 해당 페이지를 재요청한다.
4. Aspnet_wp.exe 프로세스에 연결되면, 해당 프로세스에 있는 모든 스레드가 멈춘다. 디버거에 연결되면 클라이언트 요청을 실행할 수 없기 때문에 실제로 사용중인 응용 프로그램은 디버깅하지 않도록 한다.
5. 미리 컴파일된 컴포넌트를 디버깅하기 위해서는, 디버깅을 하기 전에 심볼릭 정보를 갖도록 컴파일해야 한다.
이 글은 다음 링크에 있는 글을 번역한 것입니다.
http://www.dotnetjunkies.com/quickstart ··· sdk.aspx
여러분이 아무리 훌륭한 프로그래머라고 할지라도, 한번쯤은 실수를 저지를 수 있다. 만약 적절한 도구가 없다면 코드에서 발생한 문제점들을 해결하기 어려울 수 있다. 다행스럽게도 ASP.NET이 컴파일된 파일을 이용할 때의 특징은 Web 응용 프로그램을 디버깅하는 거이 다른 managed 응용 프로그램을 디버깅하는 것과 다르지 않다는 것을 의미한다. 또한 .NET Framewor SDK는 이러한 목적을 달성하기에 충분한 가벼운 디버거를 포함하고 있다.
이 글은 SDK에서 제공하는 디버거를 사용하여 ASP.NET Framework 응용 프로그램을 디버깅하기 위해서 필요한 과정들을 설명한다. 이 디버거는 로컬 개발 컴퓨터에서의 프로세스 수동 연결 디버깅을 지원한다. SDK에 포함되어 있는 디버거 문서에서 특정한 기능에 대한 정보를 확인할 수 있다.
ASP.NET 응용 프로그램에서 디버그 모드 활성화하기
ASP.NET Framework 응용 프로그램의 많은 구성 요소들이 런타임시에 동적으로 컴파일되기 때문에(예를 들면, .aspx와 .asmx 파일), 여러분은 응용 프로그램을 디버깅하기 전에 반드시 해당 응용 프로그램을 심볼 정보와 함께 컴파일하도록 ASP.NET 런타임을 구성해야 한다. 심볼(.pdb 파일) 파일들은 디버거가 바이너리에 대한 원본 소스 파일을 찾고 해당 소스 파일의 코드에 있는 중단점을 매핑하기 위해서 사용한다. 심볼 정보를 갖도록 응용 프로그램을 컴파일하기 위해서는, 우선 응용 프로그램의 루트 디렉터리에 있는 Web.config 파일을 찾는다. 그리고 다음과 같이 system.web 그룹내에 있는 compilation 섹션에서 debug 특성을 포함한다.
<configuration>
<compilation debug="true"/> </configuration>
중요 : 이 특성은 응용 프로그램의 성능에 매우 큰 영향을 끼치기 때문에, 응용 프로그램을 디버깅할 때에만 이 특성을 활성화해야 한다.
ASP.NET 응용 프로그램 디버깅하기
해당 응용 프로그램에 대한 디버깅을 활성화했다면, 디버깅하고자하는 페이지에 대한 요청을 만들어야 한다. 이렇게 함으로써 ASP.NET 런타임 프로세스(Aspnet_wp.exe)가 생성되고 응용 프로그램이 메모리에 로드되도록 한다.
디버깅 시작하기 위해서는 다음 단계를 수행한다.
1. .NET Framework 디버거, DbgClr.exe(기본 위치는 C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\GuiDebug 이다)를 실행한다.
2. 디버깅하고자 하는 페이지에 대한 소스 파일을 열기 위해서 <파일>-<열기>-<파일> 메뉴를 선택한다.
3. <도구>-<프로세스 디버그> 메뉴를 선택한다. 이 메뉴를 선택하면 아래 그림과 같은 창이 표시될 것이다.
4. 만약 시스템 프로세스 표시 체크 상자를 체크되어 있지 않다면 이 체크 상자를 체크한다.
5. Aspnet_wp.exe 프로세스를 찾아서 프로세스에 연결하기 대화 상자를 띄우기 위해서 해당 프로세스를 더블 클릭한다.
6. 여러분이 작성한 응용 프로그램이 실행 응용 프로그램 목록에 표시되는지 확인하고 응용 프로그램에 연결하기 위해서 [확인]을 클릭한다.
7. 프로세스 대화 상자를 닫는다.
중요 : 여러분이 Aspnet_wp.exe 프로세스에 연결할 때, 해당 프로세스에 있는 모든 스레드가 멈춘다. 디버거에 연결되면 클라이언트 요청을 실행할 수 없기 때문에 실제로 사용중인 응용 프로그램은 디버깅하지 않도록 한다.
중단점 설정하기
페이지에서 중단점을 설정하기 위해서, 실행 문이나 함수/메서드를 포함하고 있는 줄의 왼쪽 여백을 클릭한다. 중단점이 설정된 곳에 붉은 점이 나타난다. 중단점이 Aspnet_wp.exe 프로세스에 있는 정확한 응용 프로그램 인스턴스에 적절하게 매핑되었는지를 확인하기 위해서 중단점 위로 마우스를 이동시킨다.
브라우저에서 해당 페이지를 다시 요청한다. 디버거가 중단점에서 멈추고 윈도우 포커스를 얻을 것이다. 이제 프로그램을 한단계씩 실행하거나 변수 값을 살펴보고, 지역 변수를 보거나 스택 정보 및 디스어셈블리 등을 확인할 수 있다. 또한 this (C#) 또는 Me (VB)에 의해서 사용된느 Request, Reponse, 그리고 Session과 같은 객체를 조사식 창에서 살펴볼 수 있다.
미리 컴파일된 컴포넌트에 대한 심볼 생성하기
비지니스 객체나 코드-비하인드 파일처럼 미리 컴파일된 컴포넌트를 디버깅하기 위해서는, 디버깅을 하기 전에 심볼릭 정보를 갖도록 컴파일해야 한다. 어셈블리에 대한 심볼은 전형적으로 경로 기반의 검색 알고리즘으로 찾는다. 심볼릭 정보를 찾기 위해서 PDB 라이브러리 (Mspdb70.dll)이 사용하는 이 알고리즘은 다음과 같다.
1. 어셈블리가 위치한 경로를 찾는다. 이 파일은 일반적으로 .pdb 파일이다. 지역 어셈블리의 경우 응용 프로그램의 /bin 디렉터리에 해당 DLL과 함께 심볼 (.pdb 파일)을 보관한다.
2. PE 파일 ( NB10 디버그 헤더)에 명시된 경로를 찾는다.
3. NT 심볼 파일 위치를 찾는다(_NT_SYMBOL_PATH와 _NT_ALT_SYMBOL_PATH 환경 변수).
알아두기 : 만약 심볼 정보를 찾을 수 없다면, 디버거는 사용자가 위치를 지정하도록 묻는다.
요약
1. 이 글에서 설명한 디버거는 로컬 개발 컴퓨터에서 실행중인 프로세스에 대해서 수동 연결 디버깅을 지원한다.
2. 디버깅을 이용하여 ASP.NET 런타임이 동적으로 심볼 정보를 갖도록 컴파일할 수 있다. 이 기능은 응용 프로그램의 루트 디렉터리에 있는 Web.config 파일에서 <compilation debug="true"/>를 설정하여 활성화한다. 이 기능을 활성화하면 응용 프로그램의 성능이 떨어지기 때문에, 여러분이 응용 프로그램을 디버깅하고 있을 때에만 활성화되어야 한다.
3. 응용 프로그램을 디버그하기 위해서는 페이지를 요청하고 Aspnet_wp.exe 프로세스에 디버거를 연결한 후, 중단점을 설정하고 해당 페이지를 재요청한다.
4. Aspnet_wp.exe 프로세스에 연결되면, 해당 프로세스에 있는 모든 스레드가 멈춘다. 디버거에 연결되면 클라이언트 요청을 실행할 수 없기 때문에 실제로 사용중인 응용 프로그램은 디버깅하지 않도록 한다.
5. 미리 컴파일된 컴포넌트를 디버깅하기 위해서는, 디버깅을 하기 전에 심볼릭 정보를 갖도록 컴파일해야 한다.
이 글은 다음 링크에 있는 글을 번역한 것입니다.
http://www.dotnetjunkies.com/quickstart ··· sdk.aspx
번역한 내용은 http://www.debuglab.com에서 가져왔습니다.
"Debugging" 카테고리의 다른 글
- LastError를 보여주는 Debugging Trace Macro (0)2007/03/05
- Dll에 breakpoint 설치하기 (0)2007/02/22
- Microsoft .NET Framework SDK 디버거 설명서 (0)2007/01/22
- Set Next Statement를 이용하여 디버깅하기 (0)2007/01/22
- ATL 디버깅 정보 출력하기 (0)2007/01/22

수안이의 컴퓨터 연구실



Leave your greetings.