Just-In-Time 디버깅

업데이트: 2010년 7월

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음 항목이 적용되지 않음

Pro, Premium 및 Ultimate

항목이 적용됨 항목이 적용됨 항목이 적용됨 항목이 적용됨 항목이 적용되지 않음

Visual Studio 외부에서 실행 중인 프로그램에 예외 또는 충돌이 발생하면 JIT(Just-In-Time) 디버깅을 통해 Visual Studio가 자동으로 시작됩니다. 따라서 Visual Studio가 실행 중이 아닐 때 응용 프로그램을 테스트하고, 문제가 발생할 경우 Visual Studio를 사용하여 디버깅을 시작할 수 있습니다.

Just-In-Time 디버깅은 시각화 도우미 같은 네이티브 응용 프로그램에 호스팅된 관리 코드에 대해 작동하지 않습니다. Windows Server 2003이나 Windows 2000 SP3 이상에 .NET Framework를 설치한 경우 컴퓨터를 다시 부팅하지 않으면 터미널 서비스 세션의 제한된 사용자 계정으로 실행되는 프로세스에 대해 Just-In-Time 디버깅이 작동하지 않습니다.

Just-In-Time 디버깅 사용

Visual Studio를 설치하면 Just-In-Time 디버깅이 기본적으로 활성화됩니다. Just-In-Time 디버깅을 비활성화하거나 다시 활성화해야 하는 경우에는 Just-In-Time 디버깅 활성화 또는 비활성화를 참조하십시오.

Just-In-Time 디버깅이 활성화되어 있으면 Visual Studio 외부에서 응용 프로그램을 테스트할 수 있습니다. 충돌이나 예외가 발생하면 다음과 같은 메시지가 포함된 대화 상자가 나타납니다.

처리되지 않은 예외('System.TypeInitializationException')가 terrarium.exe[3384]에서 발생했습니다.

이 대화 상자가 나타나면 다음 절차에 따라 디버깅을 시작할 수 있습니다.

오류 발생 시 Just-In-Time 디버깅을 시작하려면

  1. Just-In-Time 디버깅 대화 상자의 사용 가능한 디버거 목록에서 다음 제품의 새 인스턴스: Visual Studio 2010를 클릭하거나 이미 실행 중인 Visual Studio 2010의 인스턴스를 클릭합니다.

  2. 이후의 모든 충돌에 대해 Visual Studio를 자동으로 사용하려면 현재 선택한 디버거를 기본값으로 설정을 클릭합니다.

  3. 디버깅할 수 있는 코드 형식을 선택하려면 디버깅 엔진을 수동으로 선택을 클릭합니다. 이 옵션을 선택하지 않으면 프로그램의 코드 형식에 적합한 디버깅 엔진이 자동으로 선택됩니다.

  4. 확인을 클릭합니다.

  5. 응용 프로그램에 신뢰할 수 없는 코드가 있는 어셈블리가 포함되어 있으면 보안 경고 대화 상자가 나타납니다. 이 대화 상자에서 디버깅을 계속할지 여부를 결정할 수 있습니다. 디버깅을 계속하기 전에 코드를 신뢰할 수 있는지 확인해야 합니다. 직접 작성한 코드인지, 코드 작성자를 신뢰할 수 있는지, 응용 프로그램이 원격 컴퓨터에서 실행 중인 경우 프로세스 이름을 알 수 있는지 등을 확인합니다. 응용 프로그램이 로컬로 실행 중이라고 해서 반드시 신뢰할 수 있는 것은 아닙니다. 예를 들어 Internet Explorer에서 악의적인 ActiveX 컨트롤이 실행될 수도 있습니다. 이러한 악의적인 코드가 컴퓨터에서 실행될 수 있다는 가능성을 고려해야 합니다. 디버깅하려는 코드가 신뢰할 수 있는 것으로 확인되면 디버그를 클릭합니다. 그렇지 않으면 디버그 안 함을 클릭합니다.

Just-In-Time 디버깅 활성화 또는 비활성화

옵션 대화 상자에서 Just-In-Time 디버깅을 활성화하거나 비활성화할 수 있습니다.

Just-In-Time 디버깅을 활성화하거나 비활성화하려면

  1. 도구 메뉴에서 옵션을 클릭합니다.

  2. 옵션 대화 상자에서 디버깅 폴더를 선택합니다.

  3. 디버깅 폴더에서 Just-In-Time 페이지를 선택합니다.

  4. 다음 코드 형식에 Just-In-Time 디버깅 사용 상자에서 해당 프로그램 형식(관리, 네이티브 또는 스크립트)을 선택하거나 해제합니다.

    활성화되어 있는 Just-In-Time 디버깅을 비활성화하려면 프로그램을 관리자 권한으로 실행해야 합니다. Just-In-Time 디버깅을 활성화하면 레지스트리 키가 설정되고 이 키를 변경하려면 관리자 권한이 있어야 합니다.

  5. 확인을 클릭합니다.

기본적으로 Windows Forms 응용 프로그램에는 복구할 수 있는 경우 프로그램을 계속 실행할 수 있도록 하는 최상위 예외 처리기가 있습니다. 따라서 Windows Forms 응용 프로그램의 Just-In-Time 디버깅을 활성화하려면 다음과 같은 단계를 추가로 수행해야 합니다.

Windows Form에 Just-In-Time 디버깅을 사용하려면

  1. machine.config 또는 application.exe.config 파일의 system.windows.form 섹션에서 jitDebugging 값을 true로 설정합니다.

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  2. C++ Windows Forms 응용 프로그램의 경우 .config 파일이나 코드에서 DebuggableAttribute도 설정해야 합니다. /Zi만 사용하고 /Og는 사용하지 않은 상태에서 컴파일하면 컴파일러에서 이 특성을 자동으로 설정합니다. 그러나 최적화되지 않은 릴리스 빌드를 디버깅하려면 이 특성을 직접 설정해야 합니다. 응용 프로그램의 AssemblyInfo.cpp 파일에 다음 줄을 추가하여 이 특성을 설정할 수 있습니다.

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)]; 
    

    자세한 내용은 DebuggableAttribute를 참조하십시오.

컴퓨터에 Visual Studio가 더 이상 설치되어 있지 않아도 Just-In-Time 디버깅은 계속 활성화되어 있습니다. 그러나 Visual Studio가 설치되어 있지 않으면 Visual Studio 옵션 대화 상자에서 Just-In-Time 디버깅을 비활성화할 수 없습니다. 이 경우 Windows 레지스트리를 편집하여 Just-In-Time 디버깅을 비활성화할 수 있습니다.

레지스트리를 편집하여 Just-In-Time 디버깅을 비활성화하려면

  1. 시작 메뉴에서 실행을 클릭합니다.

  2. 실행 대화 상자에서 regedit를 입력한 다음 확인을 클릭합니다.

  3. 레지스트리 편집기 창에서 다음 레지스트리 키를 찾아 삭제합니다.

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

  4. 컴퓨터가 64비트 운영 체제에서 실행되는 경우에는 다음 레지스트리 키도 삭제합니다.

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

  5. 실수로 다른 레지스트리 키를 삭제하거나 변경하지 않도록 주의합니다.

  6. 레지스트리 편집기 창을 닫습니다.

Just-In-Time 디버깅 오류

Just-In-Time 디버깅과 관련된 다음 오류 메시지가 나타날 수도 있습니다.

  • 처리되지 않은 win32 예외가 <program>에서 발생했습니다. Just-In-Time이 이 예외를 디버깅하지 못했습니다. 다음 오류가 발생했습니다. 로그인한 사용자는 충돌 응용 프로그램을 디버깅할 수 있는 액세스 권한이 없습니다.

    이 메시지는 사용자에게 적절한 액세스 권한이 없기 때문에 Just-In-Time 디버깅에 실패했음을 나타냅니다. 필요한 사용 권한에 대한 자세한 내용은 원격 디버깅 권한을 참조하십시오.

  • 충돌 프로세스에 연결할 수 없습니다. 지정한 프로그램은 Windows 또는 MS-DOS 프로그램이 아닙니다.

    이 오류는 Windows 2000에서 다른 사용자로 실행 중인 프로세스에 연결하려고 할 때 발생합니다.

    이 문제를 해결하려면 Visual Studio를 시작하고 디버그 메뉴에서 프로세스에 연결 대화 상자를 연 다음 사용 가능한 프로세스 목록에서 디버깅할 프로세스를 찾습니다. 프로세스 이름을 모르는 경우에는 Visual Studio Just-In-Time Debugger 대화 상자에서 프로세스 ID를 확인한 다음 사용 가능한 프로세스 목록에서 프로세스를 선택하고 연결을 클릭합니다. Visual Studio Just-In-Time Debugger 대화 상자에서 아니요를 클릭하여 대화 상자를 닫습니다.

  • 로그온한 사용자가 없으므로 디버거를 시작할 수 없습니다.

    이 오류는 콘솔에 로그온한 사용자가 없는 컴퓨터에서 Just-In-Time 디버깅 시 Visual Studio를 시작하려고 할 때 발생합니다. 로그온한 사용자가 없으므로 Just-In-Time 디버깅 대화 상자를 표시할 사용자 세션이 없습니다.

    이 문제를 해결하려면 컴퓨터에 로그온합니다.

  • 클래스가 등록되지 않았습니다.

    이 오류는 설치 문제 등으로 인해 등록되지 않은 COM 클래스를 디버거에서 만들려고 했음을 의미합니다.

    이 문제를 해결하려면 설치 디스크를 사용하여 Visual Studio를 다시 설치하거나 복구합니다.

참고 항목

참조

Just-In-Time, Debugging, Options Dialog Box

Security Warning: Attaching to a process owned by an untrusted user can be dangerous. If the following information looks suspicious or you are unsure, do not attach to this process

개념

디버거 보안

기타 리소스

디버거 로드맵

변경 기록

날짜

변경 내용

이유

2010년 7월

검색을 쉽게 하기 위해 하나의 항목으로 정보가 통합되었습니다.

고객 의견

2010년 8월

사용되지 않는 오류 메시지가 제거되었습니다.

고객 의견