FAQ - 디버거 기능 찾기

이 설명서에서는 Visual Studio의 디버깅 기능에 대한 질문과 대답을 다룹니다. 또한 디버깅 작업 또는 문제를 Visual Studio 디버거의 관련 기능에 매핑합니다. 이러한 링크는 다중 스레드 애플리케이션 디버깅, 코드 탐색, 메모리 누수, 변수 검사, 중단점 사용, 외부 코드 디버깅 등과 같은 작업 또는 문제를 다룹니다. 디버거 기능 개요가 필요한 경우 디버거 소개를 참조하세요.

중단점

  • 버그를 포함할 수 있는 코드 줄을 검사하기 위해 실행 중인 코드를 어떻게 일시 중지하나요?

    중단점을 설정합니다. 자세한 내용은 중단점 사용을 참조하세요.

  • 내 변수에 예기치 않은 값이 있나요? 또는 특정 상태에 도달했을 때 내 앱을 검사하려고 하나요?

    조건부 논리를 사용하여 중단점이 활성화되는 위치 및 시기를 제어합니다. 중단점을 마우스 오른쪽 단추로 클릭하여 조건을 추가합니다. 변수가 예기치 않은 값과 같으면 조건을 true로 설정합니다.

    자세한 내용은 중단점 조건을 참조하세요.

  • 어떻게 코드를 수정하거나 중지하지 않고 구성 가능한 조건에서 출력 창에 정보를 기록하나요?

    추적점을 사용하면 코드를 수정하거나 중지하지 않고 구성 가능한 조건에서 출력 창에 정보를 기록할 수 있습니다.

  • 변수 값이 변경되는 시기를 어떻게 알 수 있나요?

    C++의 경우 데이터 중단점을 설정합니다.

    .NET Core 3을 사용하는 앱의 경우에도 데이터 중단점을 설정할 수 있습니다.

    또는 C# 및 F#의 경우에만 조건부 중단점을 사용하여 개체 ID를 추적할 수 있습니다.

  • 어떻게 다른 중단점이 적중된 경우에만 실행을 중단할 수 있나요?

    다른 중단점이 먼저 적중된 경우에만 실행을 중단한 종속 중단점을 설정합니다. 자세한 내용은 종속 중단점을 참조하세요.

  • 중단점에 한 번만 도달할 수 있나요?

    코드를 한 번만 중단시킬 수 있는 임시 중단점을 설정합니다. 자세한 내용은 임시 중단점을 참조하세요.

  • 특정 반복에서 루프 내의 코드를 일시 중지할 수 있나요?

    다른 중단점이 먼저 적중된 경우에만 실행을 중단한 종속 중단점을 설정합니다. 자세한 내용은 적중 횟수를 참조하세요.

  • 함수의 이름을 알지만 위치를 모르는 경우 함수 시작 부분에서 어떻게 코드를 일시 중지할 수 있나요?

    함수 중단점을 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 함수 중단점 설정을 참조하세요.

  • 이름이 같은 여러 함수의 시작 부분에서 어떻게 코드를 일시 중지할 수 있나요?

    동일한 이름을 가진 여러 함수가 있는 경우(오버로드된 함수 또는 다른 프로젝트의 함수) 함수 중단점을 사용할 수 있습니다.

  • 중단점 관리 및 추적

    중단점 창을 사용합니다. 자세한 내용은 중단점 관리를 참조하세요.

  • 특정 처리된 또는 처리되지 않은 예외가 throw될 때 코드 일시 중지 및 디버그

    예외 도우미가 오류 발생 위치를 표시하지만 특정 오류를 일시 중지하고 디버그하려는 경우 디버거에서 예외가 throw되면 중단하도록 지시할 수 있습니다.

  • 호출 스택에서 중단점 설정

    호출 스택 창에서 실행 흐름을 검사하거나 함수를 보는 동안 코드를 일시 중지하고 디버그하려면 호출 스택 창에서 중단점 설정을 참조하세요.

  • 특정 어셈블리 명령에서 코드 일시 중지

    디스어셈블리 창에서 중단점을 설정하여 이 작업을 수행할 수 있습니다.

코드 탐색

  • 디버그하는 동안 코드를 단계별로 실행하는 명령을 어떻게 알 수 있나요?

    자세한 내용은 디버거로 코드 탐색을 참조하세요.

  • 중단점을 제거하거나 사용하지 않도록 설정하지 않고 중단점을 건너뛰는 동안 코드를 특정 줄로 실행할 수 있나요?

    이러한 시나리오에서는 "커서까지 강제 실행"을 사용할 수 있습니다. 중단점을 유지할 수 있으며 디버거는 커서가 있는 코드 줄에 도달할 때까지 중단점을 건너뜁니다. 또한 발생할 수 있는 첫 번째 예외 중단 조건을 건너뜁니다. 자세한 내용은 디버거로 코드 탐색을 참조하세요.

  • 코드 줄에 여러 메서드에 대한 호출이 있는 경우 특정 메서드를 한 단계씩 실행할 수 있나요?

    코드 줄을 마우스 오른쪽 단추로 클릭하면 '한 단계씩 코드 실행'을 선택할 수 있는 컨텍스트 메뉴가 표시됩니다. 그러면 한 단계씩 실행할 수 있는 모든 메서드 목록이 표시됩니다. 이제 해당 메서드를 선택할 수 있습니다.

데이터 검사 및 시각화

  • 앱을 실행하는 동안 변수 값을 어떻게 확인할 수 있나요?

    데이터 팁을 사용하여 변수를 마우스로 가리키거나 자동 및 지역 창에서 변수를 검사합니다.

  • 특정 변수의 값 변화를 관찰할 수 있나요?

    변수에 조사식을 설정합니다. 자세한 내용은 변수에 조사식 설정을 참조하세요.

  • 디버거 창에 너무 긴 문자열을 어떻게 볼 수 있나요?

    문자열 시각화 도우미는 데이터 팁 또는 디버거 창에 너무 긴 문자열을 보여 줍니다. 또한 잘 구성되지 않은 문자열을 식별하는 데 도움이 될 수 있습니다.
    Visual Studio의 기본 제공 문자열 시각화 도우미에는 텍스트, XML, HTML 및 JSON 옵션이 포함됩니다.

  • 큰 컬렉션 개체를 어떻게 볼 수 있나요?

    데이터 집합 시각화 도우미를 사용하면 DataSet, DataTable, DataView 또는 DataViewManager의 내용을 볼 수 있습니다. IEnumerable 시각화 도우미를 사용하면 배열, 목록 등과 같은 개체를 볼 수 있습니다. 자세한 내용은 테이블 형식 시각화 도우미를 참조하세요.

이미 실행 중인 앱 디버그

  • 어떻게 로컬 또는 원격 컴퓨터에서 실행 중인 앱을 디버그하거나, 여러 프로세스를 동시에 디버그하거나, Visual Studio에서 생성되지 않은 앱을 디버그하거나, Visual Studio에서 시작하지 않은 앱을 디버그할 수 있나요?

    실행 중인 프로세스에 연결을 참조하세요.

  • 동일한 애플리케이션에 반복적으로 연결하려면 어떻게 해야 하나요?

    프로세스에 다시 연결(Shift+Alt+P)을 사용하면 매번 프로세스에 연결 대화 상자를 거치지 않고도 한 번의 클릭으로 애플리케이션 디버깅을 쉽게 시작할 수 있습니다. 프로세스에 다시 연결을 참조하세요.

다중 스레드 애플리케이션 디버그

  • 다중 스레드 애플리케이션을 디버그하려면 어떻게 해야 하나요? 또는 내 애플리케이션이 정지 상태인가요?

    병렬 스택 창 추가 문제 해결을 참조하세요.

  • 함수가 호출되는 순서를 어떻게 볼 수 있나요?

    호출 스택을 보는 방법을 참조하세요.

메모리 분석

  • 내 애플리케이션에 메모리 누수가 있나요?

    스냅샷을 만들고 메모리 도구로 열어 문제를 추가로 해결합니다. 메모리 사용량 측정을 참조하세요.

  • 어떻게 네이티브 또는 관리되는 애플리케이션의 메모리 사용량을 분석할 수 있나요?

    라이브 디버깅, 힙 덤프 또는 성능 프로파일러를 통해 Visual Studio 메모리 도구를 사용합니다.
    메모리 분석 도구 선택을 참조하세요.

  • 디버거를 연결하지 않고 네이티브 또는 관리되는 애플리케이션의 메모리 사용량을 어떻게 분석할 수 있나요? 메모리 사용량 도구를 사용하도록 설정된 Visual Studio 성능 프로파일러를 사용합니다.
    메모리 사용량 분석을 참조하세요.

  • 두 지정 시간 사이의 메모리 사용량을 비교할 수 있나요?

    메모리 도구의 스냅샷을 비교하거나 차이 기능을 사용하여 두 개의 힙 덤프를 비교합니다. 메모리 사용량 분석을 참조하세요.

외부 코드 디버깅

  • 디버깅하는 동안 사용자 코드만 볼 수 있나요?

    내 코드만은 시스템, 프레임워크 및 기타 사용자 코드가 아닌 코드에 대한 호출을 자동으로 프로시저 단위로 실행하는 Visual Studio 디버깅 기능입니다. 호출 스택 창에서 내 코드만은 이러한 호출을 [외부 코드] 프레임으로 축소합니다. 내 코드만을 사용하여 사용자 코드만 디버그를 참조하세요.

  • 프로그램이 실행 중인 원시 어셈블리 지침을 보거나 디버그하려면 어떻게 해야 하나요?

    디버그 > Windows > 디스어셈블리에서 디스어셈블리 창을 사용합니다. 한 번에 하나의 명령을 단계별로 실행하고 개별 어셈블리 명령에 중단점을 설정할 수도 있습니다.

  • .NET 라이브러리에 대한 소스 코드를 볼 수 있나요?

    .NET 라이브러리에 대한 기호 및 소스를 다운로드하기 위해 디버그 > 옵션 > 기호에서 Microsoft 기호 서버를 사용하도록 설정합니다. 기호 지정을 참조하세요.

  • 특정 또는 공유 위치 또는 서버에서 PDB를 로드하려면 어떻게 해야 하나요?

    디버그 > 옵션 > 기호에서 기호 서버를 구성합니다. 기호 지정을 참조하세요.

  • 특정 PDB를 로드하지 않으려면 어떻게 해야 하나요? 또는 항상 로드하려면 어떻게 해야 하나요?

    디버그 > 옵션 > 기호에서 포함 및 제외 목록을 구성합니다.
    기호 지정을 참조하세요.

디버깅 구성

  • 디버거 설정은 어떻게 구성하나요?

    디버거 옵션 및 디버거 프로젝트 설정을 구성하려면 디버거 설정 및 준비를 참조하세요.

  • 디버거에 표시되는 정보를 어떻게 사용자 지정할 수 있나요?

    다른 디버거 창에서 개체 형식 이외의 정보를 값으로 표시해야 할 수 있습니다. C#, Visual Basic, F# 및 C++/CLI 코드의 경우 DebuggerDisplay 특성을 사용합니다. 더 많은 고급 옵션을 위해 사용자 지정 시각화 도우미를 만들어 UI를 사용자 지정할 수도 있습니다. 네이티브 C++의 경우 NatVis 프레임워크를 사용합니다.

추가 작업

  • 덤프를 저장해야 하나요?

    디버깅 중 오류 또는 중단점에서 중지된 동안 디버그 > 다른 이름으로 덤프 저장을 선택합니다. 덤프 파일을 참조하세요.

  • 덤프 파일을 어떻게 분석하나요?

    Visual Studio에서 파일 > 열기를 선택하여 덤프를 엽니다. 디버깅을 시작하려면 관리 전용으로 디버그, 네이티브 전용으로 디버그, 혼합 디버그 또는 관리되는 메모리로 디버그를 선택합니다. 덤프 파일을 참조하세요.

  • 디버깅 세션 중에 코드를 편집할 수 있나요?

    편집하며 계속하기를 사용합니다. XAML의 경우 XAML 핫 다시 로드를 사용합니다.

  • 어떻게 원격 컴퓨터에서 디버그할 수 있나요?

    원격 디버깅을 참조하세요.

  • 성능 문제를 어떻게 해결할 수 있나요?

    프로파일링 도구 살펴보기를 참조하세요.

  • 예외 수정은 어떻게 하나요?

    예외 수정을 참조하세요.