원문 : Breakpoints and Tracepoints in Visual Studio - BlackWasp
프로그램 코드를 디버깅할 때 원하는 위치에서 코드를 멈추게 하는게 중요해요!!
Visual Studio 에서는 breakpoint 를 이용하여 코드를 특정 위치에 멈추게 하며 Trace 정보를 출력시킬 수 도 있다.
What are Breakpoints?
Release 모드로 컴파일된 프로그램이 실행되었을 경우와 디버거가 활성화 되지 않을 경우 breakpoint를 이용할 수 없다.
Settings and Clearing Breakpoints
breakpoint는 프로그램이 실행될 때 실행되는 코드 라인과 클래스 라이브러리에 추가할 수 있다.
주석이나 공백 라인, 클래스 선언부에는 breakpoint를 추가할 수 없다.
테스트할 코드이다. 새로운 콘솔 응용프로그램을 만들고 다음 코드를 메인 메소드에 추가 추가!
for (int i = 1; i <= 12; i++)
{
Console.WriteLine("Multiplication table {0}.\n", i);
for (int j = 1; j <= 12; j++)
{
Console.WriteLine("{0} x {1} = {2}", j, i, i * j);
}
Console.WriteLine("\n");
}
Setting a Breakpoint
breakpoint 추가하는 방법 몇가지가 있는데 우선 Visual Studio의 메뉴를 이용한다. 이 경우 커서가 위치한 곳에 breakpoint가 찍힌다. 단축키 F9를 이용해도 된다.
맨 좌측에 빨간색 동그라미를 "Breakpoint Glyph" 라고 부른다고 한다. (실제로는 한 번도 못들어봤음 ㅋ)
F5키를 눌러 디버깅 모드로 돌입! 프로그램 실행 중 코드의 breakpoint를 만나면 프로그램은 break 모드로 들어간다.
break 모드에서 디버깅 툴을 이용해 코드를 단계별로 디버깅 할 수 있다. 다시 F5를 누르면 break 모드를 빠져나온다.
breakpoint는 맨 좌측 부분을 마우스로 클릭해서도 추가 가능!
Removing a Breakpoint
breakpoint를 추가하는 방법으로 breakpoint를 제거할 수 있다.
규모가 큰 프로그램을 디버깅 할 때 많은 breakpoint를 설정한다. 디버깅이 끝났다면 디버그 메뉴의 "Delete All Breakpoints"를 선택하여 모든 breakpoint를 제거할 수 있다.
Disabling Breakpoints
지정한 breakpoint를 해제하지 않고 일시적으로 비활성화 시킬 수 있다. 지정한 breakpoint에서 마우스 오른쪽 버튼을 누른 후 "Disable Breakpoint"를 선택해 준다. (커맨드 메뉴의 디버그 메뉴 에서도 가능) 비활성화된 breakpoit는 가운데 색이 빠진 원 모양으로 표시된다.
File Breakpoint Dialog
위와 같은 간단한 breakpoint를 생성하는 것 외에 Visual Studio 에서 breakpoint의 추가 설정을 할 수 있다.
활성화된 breakpoint 에서 마우스 오른쪽 버튼을 눌러 "Location..."을 선택한다.
File Breakpoint dialog box 에서 3가지 설정을 이용하여 breakpoint의 위치 정보를 설정한다.
- File : breakpoint가 위치될 코드 파일의 파일 이름
- Line : breakpoint가 위치될 코드 라인(행) 번호
- Character : breakpoint가 위치될 코드의 열 번호
Character 설정을 이용하면 한 라인에 여러개의 커맨드가 있을 때 break할 커맨드를 설정할 수 있다.
일반적으로 break 모드로 디버깅할때 소스 코드 파일은 반드시 컴파일된 파일과 일치해야 한다. 때때로 사소한 수정을 코드에 했지만 기존 breakpoint를 그대로 사용하고 싶은 경우가 있다. 이 때 "Allow the source code to be different from the original version"(소스 코드가 원래 버전과 일치하지 않아도 됨) 옵션을 선택해 준다.
Conditional Breakpoints
conditional breakpoints는 조건에 맞을때만 break모드로 들어간다. 조건은 Breakpoint Condition dialog box를 이용하여 지정한다.
Condition 체크박스를 체크해야 조건을 판별한다. 조건식을 텍스트박스에 입력한다.
조건은 두가지가 있다.
- Is true : 텍스트박스의 조건이 참일때만 break 모드로 들어간다.
- Has changed : 조건의 값이 변경되었을 경우 break 모드로 들어간다.
테스트를 위해 조건식에 "i == 10"을 입력한다. 옵션은 "Is true" 옵션 선택.
프로그램을 디버그 모드로 실행시키면 i 가 10일 경우에만 break 모드로 들어간다.
*) 이 경우 File breakpoint 옵션에서 character값을 수정하여 "i<=12"에 breakpoint가 지정되어 있어야 한다.
Setting a Hit Count
모든 breakpoints 는 디버그 모드로 실행중일 동안 hit count를 유지한다. hit count는 0부터 시작하며 breakpoint로 break모드로 들어갈 경우 그 수가 증가한다. Breakpoint Hit Count dialog box를 통해 현재 hit count에 해당하는 행동을 설정할 수 있다.
breakpoint에 마우스 오른쪽 버튼을 클릭하여 컨텍스트메뉴에서 Breakpoint Hit Count dialog box를 불러온다.
옵션
- break always.
: 기본 설정으로 breakpoint로 매번 hit될 때마다 break 모드로 들어간다.
- break when the hit count is equal to.
: 이 설정으로 breakpoint가 단 한번만 활성화 된다. hit count가 텍스트박스에 입력한 값과 같을때만 활성화됨.
- break when the hit count is a multiple of.
: hit count 가 지정한 수의 배수일 경우만 break 모드로 들어간다.
- break when the hit count is greater than or equal to.
: hit count 가 지정한 수보다 크거나 같을 경우만 break 모드로 들어간다.
Breakpoint Filters
한글 Visual Studio 의 Breakpoint Filter dialog box의 설명을 보자!
(자주 사용하는 기능이 아니라 읽어만 봐서는...)
다른 추가 설정과 마찬가지로 breakpont의 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 "Filter..."를 선택해서 호출한다.
Creating Tracepoints
breakpoint를 tracepoint로 변환하는 방법을 알아보자. tracepoint는 메시지를 출력하거나 매크로를 실행시킨다는 점을 제외하고선 breakpoint와 비슷한다. 게다가 tracepoint를 사용할 경우 프로그램의 실행 중단은 선택적이다.
breakpoint를 tracepoint로 변경하기 위한 dialog box를 실행시킨다. breakpoint 에서 마우스 오른쪽 버튼을 누른 후 컨텍스트 메뉴에서 "When Hit..." (적중될 때)를 선택하면 된다.
breakpoint를 tracepoint로 변경하기 위해 tracepoint가 실행될 경우 출력될 메시지 또는 실행될 매크로 또는 이 두 옵션 모두를 설정한다. 메시지를 출력하기 위해 "Print a message" (메시지 표시) 옵션을 체크한다. 메시지는 breakpoint 주변의 변수이름을 이용하여 변수값을 출력할 수 있다. ("{변수}" 형식 이용). 또한 현재 함수, 프로세스, 스레드 정보를 출력하는 키워드를 사용할 수 있다.
테스트를 위해 메시지 표시 텍스트박스에 다음과 같이 입력한다.
New multiplication table {i}
tracepoint를 만날때 마다 출력 메시지로 설정한 메시지는 Visual Studio의 출력 윈도우에 출력된다.
두 번째 옵션인 "Run a macro" 를 선택하여 tracepoint가 hit되었을 경우 실행할 매크로를 지정할 수 있다. 매크로는 Visual Studio가 미리 정의한 매크로를 사용할 수 있으며 또한 사용자가 작성한 매크로도 사용할 수 있다.
마지막 옵션인 "Continue execution" (계속 실행) 는 tracepont가 breakpoint 처럼 동작할 것인지를 설정한다. 만약 이 옵션이 선택되었을 경우 tracepoint는 출력 및 매크로 실행 후 계속 프로그램을 진행시킨다. 옵션이 체크 해제되었을 경우 breapoint 처럼 hit되었을 경우 프로그램을 break 모드로 들어가게 한다.
The Breakpoint Window
Visual Studio는 Breakpoint 윈도우를 통해 현재 프로젝트의 breakpoint 와 tracepoint를 관리할 수 있게 도와준다.
메뉴의 Debug -> Windows -> Breakpoints 선택
Demo program