Visual Studio에서 디버깅 시작, 중단, 단계별 실행, 실행 및 중지
VS 프로젝트 디버깅 시작, 프로세스에 연결, 코드 중단, 단계별 코드 실행, 커서까지 실행, 호출 스택의 함수까지 실행, 다음 문 설정, 내 코드만 단계별 실행, 디버깅 중지 및 다시 시작, 디버깅된 프로세스에서 분리 등을 수행합니다.
콘텐츠
Start debugging a VS project; attach to a process
Break into code, step or run through code, set the next statement to execute
Stop, restart debugging; detach from the debugged process
VS 프로젝트 디버깅 시작, 프로세스에 연결
- Start debugging a VS project**|**Attach to a process
VS 프로젝트 디버깅 시작
Visual Studio에서 솔루션을 열 때 다음 세 가지 옵션 중에서 선택하여 디버깅을 시작할 수 있습니다.
디버그, 디버깅 시작을 선택합니다(키보드: F5). |
응용 프로그램이 시작되고 다음까지 실행됩니다.
|
디버그, 한 단계씩 코드 실행(키보드: F11) 또는 디버그, 프로시저 단위 실행(키보드: F10)을 선택합니다. |
응용 프로그램이 시작되고 첫 번째 줄에서 중단됩니다. |
소스 창에서 실행 코드 줄을 선택하고 상황에 맞는 메뉴에서 커서까지 실행을 선택합니다. |
응용 프로그램이 시작되고 중단점 또는 커서 위치 중 하나에 먼저 도달할 때까지 실행됩니다. |
디버깅하는 동안 코드 맵에서 코드 실행을 시각적으로 추적하려면 Visual Studio에서 디버깅하는 동안 호출 스택의 맵 메서드을 참조하십시오.
Contents | Start debugging a VS project; attach to a process
프로세스에 연결
디버거는 Visual Studio 외부의 프로세스에서 실행 중인 프로그램에도 연결될 수 있습니다. 일단 프로그램에 연결되면 디버거 실행 명령을 사용하고 프로그램 상태를 검사하는 등의 작업을 수행할 수 있습니다. 디버그 정보를 사용하여 프로그램을 빌드했는지 여부, 프로그램의 소스 코드에 액세스할 수 있는지 여부 및 공용 언어 런타임 JIT 컴파일러가 디버그 정보를 추적하고 있는지 여부에 따라 프로그램 검사 기능이 제한될 수 있습니다.
로컬 컴퓨터에서 실행 중인 프로세스에 연결하려면
디버그, 프로세스에 연결을 선택합니다. 프로세스에 연결 대화 상자의 사용 가능한 프로세스 목록에서 프로세스를 선택한 다음 연결을 선택합니다.
자세한 내용은 Visual Studio 디버거에서 실행 중인 프로세스에 연결를 참조하십시오.
Contents | Start debugging a VS project; attach to a process
코드 중단, 단계별 실행 또는 지정된 위치까지 실행, 다음에 실행할 문 설정
- Break into code by using breakpoints or Break All**|Step into, over, or out of the code|Run to a specified location or function|Set the next statement to execute|Restrict stepping to Just My Code|Step into system calls|**Step into properties and operators in managed code
중단점 또는 모두 중단을 사용하여 코드 중단
VS 디버거를 사용하여 응용 프로그램을 디버깅할 때 응용 프로그램은 실행 중이거나 중단 모드에 있습니다.
실행이 중단점에 도달하거나 예외가 발생하면 디버거에서 응용 프로그램 실행을 중단합니다. 언제든지 수동으로 실행을 중단할 수도 있습니다.
중단점은 특정 위치에서 응용 프로그램 실행을 일시 중단하도록 디버거에 지시하는 신호입니다. 프로그램 실행이 중단점에서 중단되면 프로그램은 중단 모드에 있는 것입니다. 중단 모드가 시작되어도 프로그램 실행이 중지되거나 종료되지는 않으며, 언제라도 실행을 다시 시작할 수 있습니다.
지역 창에서 변수 값 보기 또는 조사식 창에서 식 계산과 같은 대부분의 디버거 기능은 중단 모드에서만 사용할 수 있습니다. 응용 프로그램의 모든 요소가 유지되지만(예: 함수, 변수 및 개체가 메모리에 유지됨) 이동과 작업은 일시 중단됩니다. 중단 모드에서는 요소의 위치와 상태를 검사하여 위반이나 버그를 찾아낼 수 있습니다. 중단 모드에 있는 동안 응용 프로그램을 조정할 수도 있습니다.
다양한 조건을 기준으로 실행을 일시 중단하도록 중단점을 구성할 수 있습니다. 중단점: Visual Studio 디버거에서 원하는 시기 및 위치에서 적중 횟수, 호출 스택 함수 및 조건을 사용하여 중단을 참조하십시오. 이 단원에서는 코드를 중단하는 두 가지 기본적인 방법을 설명합니다.
코드에 중단점 설정
코드에 간단한 중단점을 설정하려면 Visual Studio 편집기에서 소스 파일을 엽니다. 중단하려는 코드 줄에 커서를 설정한 다음 상황에 맞는 메뉴에서 중단점, 중단점 삽입을 선택합니다(키보드: F9). 디버거는 해당 줄이 실행되기 바로 전에 실행을 중단합니다.
Visual Studio에서 중단점은 조건부 중단점 및 추적점과 같은 다양한 추가 기능을 제공합니다. 중단점: Visual Studio 디버거에서 원하는 시기 및 위치에서 적중 횟수, 호출 스택 함수 및 조건을 사용하여 중단을 참조하십시오.
수동으로 코드 중단
실행 중인 응용 프로그램의 사용 가능한 다음 코드 줄에서 중단하려면 디버그, 모두 중단을 선택합니다(키보드: Ctrl+Alt+Break).
내 코드만 옵션을 사용하여 디버깅하는 경우 프로젝트의 다음 코드 줄에서 중단합니다. Restrict stepping to Just My Code을 참조하십시오.
여러 프로그램을 디버깅하는 경우 중단점 또는 모두 중단 명령은 기본적으로 디버깅 중인 모든 프로그램에 적용됩니다. Configure the execution behavior of multiple processes을 참조하십시오.
해당 소스 또는 기호(.pdf) 파일 없이 코드를 실행하는 동안 중단하는 경우 디버거에서 적절한 파일을 찾는 데 도움이 될 수 있는 소스 파일을 찾을 수 없음 또는 기호를 찾을 수 없음 페이지가 표시됩니다. Visual Studio 디버거에서 기호 파일(.pdb) 및 원본 파일 지정을 참조하십시오.
지원 파일에 액세스할 수 없는 경우에도 디스어셈블리 창에서 어셈블리 명령을 디버깅할 수 있습니다.
Contents | Break into code, step or run through code, set the next statement to execute
한 단계씩 코드 실행, 프로시저 단위 실행 또는 프로시저 나가기
가장 일반적인 디버깅 절차 중 하나는 단계별 실행입니다. 단계별 실행은 한 번에 한 줄씩 코드를 실행합니다. 중단점까지 디버거를 실행하는 등의 방법으로 실행을 중단한 경우 다음 세 가지 디버그 메뉴 명령을 사용하여 코드를 단계별로 실행할 수 있습니다.
메뉴 명령 |
바로 가기 키 |
설명 |
---|---|---|
한 단계씩 코드 실행 |
F11 |
코드 줄에 함수 호출이 포함되어 있는 경우 한 단계씩 코드 실행은 호출 자체만 실행한 다음 함수 안에 있는 코드의 첫째 줄에서 중단합니다. 그렇지 않은 경우에는 한 단계씩 코드 실행은 다음 문을 실행합니다. |
프로시저 단위 실행 |
F10 |
코드 줄에 함수 호출이 포함된 경우 프로시저 단위 실행은 호출된 함수를 실행한 다음 호출하는 함수 내의 첫 번째 코드 줄에서 중단됩니다. 그렇지 않은 경우에는 한 단계씩 코드 실행은 다음 문을 실행합니다. |
프로시저 나가기 |
Shift+F11 |
프로시저 나가기는 함수가 반환될 때까지 코드 실행을 계속한 다음 호출 함수의 반환점에서 중단합니다. |
중첩된 함수 호출인 경우 한 단계씩 코드 실행 명령은 가장 안쪽에 중첩된 함수를 한 단계씩 실행합니다. Func1(Func2())와 같은 호출에 한 단계씩 코드 실행을 사용하면 디버거에서 함수 Func2를 한 단계씩 실행합니다.
실제로 디버거는 실제 줄이 아닌 코드 문을 단계별로 실행합니다. 예를 들어 한 줄에 if 절을 작성할 수 있습니다.
int x = 42; string s = "Not answered"; if( int x == 42) s = "Answered!";
Dim x As Integet = 42 Dim s As String = "Not answered" If x = 42 Then s = "Answered!"
이 줄을 한 단계씩 실행하면 디버거는 조건을 한 단계로 처리하고 결과를 다른 단계로 처리합니다(이 예에서는 조건이 참임).
함수를 한 단계씩 실행하는 동안 호출 스택을 시각적으로 추적하려면 Visual Studio에서 디버깅하는 동안 호출 스택의 맵 메서드을 참조하십시오.
Contents | Break into code, step or run through code, set the next statement to execute
지정된 위치 또는 함수까지 실행
코드의 특정 위치까지 실행한 다음 실행을 중단할 수도 있습니다. 중단하려는 위치에 중단점을 설정한 경우, 디버깅을 시작하지 않았으면 디버그, 디버깅 시작을 선택하고 그렇지 않으면 디버그, 계속을 선택합니다. 두 경우 모두 바로 가기 키는 F5입니다. 코드 실행의 다음 중단점에서 디버거가 중지됩니다. 원하는 중단점에 도달할 때까지 디버그, 계속을 선택합니다.
코드 편집기에서 커서를 놓은 위치까지 실행하거나 지정된 함수까지 실행할 수도 있습니다.
커서 위치까지 실행
커서 위치까지 실행하려면 소스 창에서 실행 가능한 코드 줄에 커서를 놓습니다. 편집기의 상황에 맞는 메뉴에서 커서까지 실행을 선택합니다.
호출 스택에 있는 함수까지 실행
호출 스택 창에서 함수를 선택하고 상황에 맞는 메뉴에서 커서까지 실행을 선택합니다. 호출 스택을 시각적으로 추적하려면 Visual Studio에서 디버깅하는 동안 호출 스택의 맵 메서드을 참조하십시오.
이름으로 지정된 함수까지 실행
지정한 함수에 도달할 때까지 응용 프로그램을 실행하도록 디버거에 명령할 수 있습니다. 함수 이름을 지정하거나 호출 스택에서 함수를 선택할 수 있습니다.
함수 이름을 지정하려면 디버그, 새 중단점, 함수에서 중단을 선택한 다음 함수의 이름과 기타 식별 정보를 입력합니다.
함수가 오버로드되거나 여러 네임스페이스에 있는 경우 중단점 선택 대화 상자에서 원하는 함수를 선택할 수 있습니다.
Contents | Break into code, step or run through code, set the next statement to execute
다음에 실행할 문 설정
디버거를 중단한 후 실행 지점을 이동하여 다음에 실행할 코드의 문을 설정할 수 있습니다. 소스 또는 디스어셈블리 창의 여백에 있는 노란색 화살표는 다음에 실행할 문의 위치를 나타냅니다. 코드의 일부를 건너뛰거나 이전에 실행한 줄로 돌아가려면 이 화살표를 이동합니다. 알려진 버그를 포함하는 코드 섹션을 건너뛰려는 경우 등에 이 방법을 사용할 수 있습니다.
다음에 실행할 문을 설정하려면 다음 절차 중 하나를 사용합니다.
소스 창에서 노랑 화살표를 같은 소스 파일에서 다음 문을 설정할 위치로 끌어 놓습니다.
소스 창에서 다음에 실행할 줄에 커서를 설정하고 상황에 맞는 메뉴에서 다음 문 설정을 선택합니다.
디스어셈블리 창에서 다음에 실행할 어셈블리 명령에 커서를 설정하고 상황에 맞는 메뉴에서 다음 문 설정을 선택합니다.
경고
다음 문을 설정하면 프로그램 카운터가 새 위치로 바로 이동하게 됩니다.이 명령은 주의해서 사용해야 합니다.
-
기존 실행 위치와 새 실행 위치 사이에서는 명령이 실행되지 않습니다.
-
실행 위치를 뒤로 이동하면 그 사이에서 실행된 명령이 실행 취소되지 않습니다.
-
다음 문을 다른 함수나 범위로 이동하면 호출 스택이 손상되어 런타임 오류나 예외가 발생할 수 있습니다.다음 문을 다른 범위로 이동하려고 하면 디버거에서 대화 상자가 열리고 여기서 작업을 취소할 수 있습니다.Visual Basic의 경우 다음 문을 다른 범위나 함수로 이동할 수 없습니다.
-
네이티브 C++에서 런타임 검사를 활성화한 경우 다음 문을 설정하면 실행이 메서드의 끝에 도달할 때 예외가 throw될 수 있습니다.
-
편집하며 계속하기를 활성화한 경우 편집하며 계속하기에서 즉시 다시 매핑할 수 없는 종류의 편집을 수행하면 다음 문 설정이 실패합니다.예를 들어 catch 블록 내의 코드를 편집하면 이 문제가 발생합니다.이 경우작업이 지원되지 않음을 알리는 오류 메시지가 나타납니다.
참고
관리 코드의 경우 다음과 같은 조건에서는 다음 문을 이동할 수 없습니다.
-
다음 문이 현재 문과 다른 메서드에 있는 경우
-
Just-In-Time 디버깅을 사용하여 디버깅을 시작한 경우
-
호출 스택 해제를 진행 중인 경우
-
System.StackOverflowException 또는 System.Threading.ThreadAbortException 예외가 throw된 경우
응용 프로그램을 실행하는 동안에는 다음 문을 설정할 수 없습니다. 다음에 실행할 문을 설정하려면 디버거가 중단 모드에 있어야 합니다.
Contents | Break into code, step or run through code, set the next statement to execute
단계별 코드 실행을 내 코드만으로 제한
디버깅하는 동안 사용자가 작성한 코드만 확인하고 시스템 호출 등의 다른 코드는 무시할 수 있습니다. 이렇게 하려면 내 코드만 디버깅 옵션을 사용합니다. 내 코드만 옵션을 사용하면 사용자가 작성하지 않은 코드는 디버거 창에 표시되지 않도록 숨겨집니다. 단계별로 실행할 때 디버거에서는 사용자가 작성하지 않은 코드도 실행하지만 이 단계에서는 실행을 중단하지 않습니다. 내 코드만을 참조하십시오.
참고
장치 프로젝트에 대해서는 내 코드만 옵션이 지원되지 않습니다.
Contents | Break into code, step or run through code, set the next statement to execute
한 단계씩 시스템 호출 실행
시스템 코드에 대한 디버깅 기호를 로드했고 내 코드만이 설정되지 않은 경우 다른 모든 호출과 마찬가지로 시스템 호출을 한 단계씩 실행할 수 있습니다.
내 코드만 옵션을 사용하지 않도록 설정하는 방법은 Restrict stepping to Just My Code을 참조하세요.
Microsoft 기호 파일에 액세스하려면 Visual Studio 디버거에서 기호 파일(.pdb) 및 원본 파일 지정 항목의 Use symbol servers to find symbol files not on your local machine를 참조하세요.
디버깅하는 동안 특정 시스템 구성 요소에 대한 기호를 로드하려면
모듈 창을 엽니다(키보드: Ctrl+Alt+U).
기호를 로드하려는 모듈을 선택합니다.
기호 상태 열을 보면 기호가 로드된 모듈을 확인할 수 있습니다.
상황에 맞는 메뉴에서 기호 로드를 선택합니다.
Contents | Break into code, step or run through code, set the next statement to execute
한 단계씩 관리 코드의 속성 및 연산자 실행
기본적으로 디버거는 관리 코드의 속성과 연산자를 건너뜁니다. 대부분의 경우 이렇게 하면 더 나은 디버깅 환경이 제공됩니다. 속성이나 연산자를 한 단계씩 실행하려면 디버그, 옵션 및 설정을 선택합니다. 디버깅, 일반 페이지에서 속성 및 연산자 건너뛰기(관리 전용) 확인란의 선택을 취소합니다.
Contents | Break into code, step or run through code, set the next statement to execute
디버깅 중지 및 다시 시작, 디버깅된 프로세스에서 분리
디버깅을 중지하면 디버깅 세션이 종료됩니다. 실행을 중지하면 디버깅하고 있는 프로세스가 종료되고 디버깅 세션이 끝납니다. 디버깅 세션이 활성인 상태에서 일시적으로 디버깅 중인 프로세스의 실행을 멈추는 실행 중단과 실행 중지를 혼동하지 마십시오. 프로세스에서 분리하면 프로세스 디버깅이 중지되지만 프로세스는 계속 실행됩니다.
- Stop debugging from VS**|Close the app that is being debugged|Restart debugging|**Detach from the debugged app
VS에서 디버깅 중지
디버그, 디버깅 중지를 선택하여 Visual Studio에서 프로그램을 시작할 때 디버깅 중인 프로세스를 종료합니다. Visual Studio에서 프로세스를 시작하지 않고 프로세스에 연결한 경우 프로세스가 계속 실행됩니다.
Contents | Stop, restart debugging; detach from the debugged process
디버깅 중인 응용 프로그램을 닫습니다.
디버깅 중인 응용 프로그램을 종료하면 디버깅이 자동으로 중지됩니다.
디버깅 다시 시작
디버그, 다시 시작을 선택하여 현재 디버깅 세션을 중지하고 디버거에서 시작 프로젝트를 다시 시작합니다.
Contents | Stop, restart debugging; detach from the debugged process
디버깅된 응용 프로그램에서 분리
디버그, 모두 분리를 선택하여 디버깅을 중지하면서 디버깅된 프로세스를 계속 실행합니다.
팁
Visual Studio를 사용하여 여러 프로세스에 연결하고 여러 프로세스를 제어하는 방법에 대한 자세한 내용은 Visual Studio 디버거에서 실행 중인 프로세스에 연결 및 Visual Studio에서 하나 이상의 프로세스 디버깅을 참조하십시오.
Contents | Stop, restart debugging; detach from the debugged process