실행 포인터를 이동하여 디버거에서 실행 흐름 변경

디버깅하는 동안 실행 포인터를 수동으로 이동하여 다음에 실행할 다음 문을 변경할 수 있습니다. 포인터를 이동하면 알려진 버그가 포함된 코드를 건너뛰는 것과 같은 상황에 유용하며, 이는 디버거의 고급 기능입니다.

실행 흐름 변경

디버거가 일시 중지된 동안 소스 코드 또는 디스어셈블리 창의 여백에 있는 노란색 화살표는 다음에 실행할 문의 위치를 나타냅니다. 이 화살표를 이동하여 실행할 다음 명령문을 변경할 수 있습니다. 코드를 건너뛰거나 이전 줄로 돌아갈 수 있습니다.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

실행할 다음 문을 변경하려는 경우 디버거는 중단 모드에 있어야 합니다. 소스 코드 또는 디스어셈블리 창에서 노란색 화살표를 다른 줄로 끌거나 다음에 실행할 줄을 마우스 오른쪽 단추로 클릭하고 다음 문 설정을 선택합니다.

프로그램 카운터는 바로 새 위치로 이동합니다. 기존 실행 지점과 새 실행 지점 사이에는 명령이 실행되지 않습니다. 그러나 실행 지점을 뒤로 이동해도 간섭 명령이 실행 취소되지 않습니다.

주의

  • 다음 문을 다른 함수나 범위로 이동하면 호출 스택이 손상되어 런타임 오류나 예외가 발생할 수 있습니다. 다음 문을 다른 범위로 이동하려고 하면 디버거가 경고를 제공하며 이때 작업을 취소할 수 있습니다.
  • Visual Basic의 경우 다음 문을 다른 범위나 함수로 이동할 수 없습니다.
  • 네이티브 C++에서 런타임 검사를 사용하는 경우 다음 문을 설정하면 실행이 메서드의 끝에 도달할 때 예외가 발생할 수 있습니다.
  • 편집하며 계속하기를 사용하는 경우 편집하며 계속하기에서 즉시 다시 매핑할 수 없는 편집을 수행한 경우 다음 문 설정이 실패합니다. 예를 들어, catch 블록에서 코드를 편집한 경우 이 상황이 발생할 수 있습니다. 이 경우 작업이 지원되지 않음을 알리는 오류 메시지가 나타납니다.
  • 관리 코드에서는 다음과 같은 경우 다음 문을 이동할 수 없습니다.
    • 다음 문이 현재 문과 다른 메서드에 있는 경우
    • Just-In-Time 디버깅으로 디버깅을 시작한 경우
    • 호출 스택 해제가 진행 중인 경우
    • System.StackOverflowException 또는 System.Threading.ThreadAbortException 예외가 throw된 경우