Visual Studio에서 Just-In-Time 디버거를 사용하여 디버그
Just-In-Time 디버깅은 Visual Studio 외부에서 실행되는 앱이 오류 또는 충돌할 때 Visual Studio를 자동으로 시작할 수 있습니다. Just-In-Time 디버깅을 사용하면 Visual Studio 외부에서 앱을 테스트하고 Visual Studio를 열어 문제가 발생할 때 디버깅을 시작할 수 있습니다.
Just-In-Time 디버깅은 Windows 데스크톱 앱에서 작동합니다. 유니버설 Windows 앱 또는 시각화 도우미와 같은 네이티브 애플리케이션에서 호스트되는 관리 코드에서는 작동하지 않습니다.
팁
Just-In-Time 디버거 대화 상자가 표시되지 않도록 하려면 Visual Studio가 설치되지 않은 경우 Just-In-Time 디버거사용하지 않도록 설정하세요. Visual Studio를 설치한 경우 Windows 레지스트리 Just-In-Time 디버깅을 사용하지 않도록필요할 수 있습니다.
Visual Studio에서 Just-In-Time 디버깅 사용 또는 사용 안 함
Visual Studio 도구>옵션(또는 디버그>옵션) 대화 상자에서 Just-In-Time 디버깅을 구성할 수 있습니다.
메모
Just-In-Time 디버깅을 사용하거나 사용하지 않도록 설정하려면 관리자 권한으로 Visual Studio를 실행해야 합니다. Just-In-Time 디버깅을 사용하거나 사용하지 않도록 설정하면 레지스트리 키가 설정되며 해당 키를 변경하려면 관리자 권한이 필요할 수 있습니다. 관리자 권한으로 Visual Studio를 열려면 Visual Studio 앱을 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행선택합니다.
Just-In-Time 디버깅을 사용하거나 사용하지 않도록 설정하려면:
도구 또는 디버그 메뉴에서 옵션>>Just-In-Time디버깅을 선택합니다.
메모
Just-In-Time 메뉴 옵션이 표시되지 않으면 Visual Studio 설치 관리자를 사용하여 Just-In-Time 디버거가 설치되어 있는지 확인합니다.
이러한 유형의 코드 대해 Just-In-Time 디버깅 사용 상자에서 디버깅할 코드 유형(관리형In-Time, 네이티브및/또는 스크립트)을 선택합니다.
확인선택합니다.
Just-In-Time 디버거를 사용하도록 설정했지만 앱이 충돌하거나 오류가 발생할 때 열리지 않는 경우 Just-In-Time 디버깅을 참조하세요.
Windows 레지스트리에서 Just-In-Time 디버깅 사용 안 함
Just-In-Time 디버깅은 Visual Studio가 컴퓨터에 더 이상 설치되어 있지 않더라도 계속 사용할 수 있습니다. Visual Studio가 더 이상 설치되지 않은 경우 Windows 레지스트리를 편집하여 Just-In-Time 디버깅을 사용하지 않도록 설정할 수 있습니다.
레지스트리를 편집하여 Just-In-Time 디버깅을 사용하지 않도록 설정하려면:
Windows 시작 메뉴에서 레지스트리 편집기(regedit.exe)를 실행합니다.
레지스트리 편집기 창에서 다음 레지스트리 항목이 있는 경우 다음 레지스트리 항목을 찾아 삭제합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
JIT 레지스트리 키JIT registry key
JIT registry key
또한 다음 레지스트리 항목이 있는 경우 삭제합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
다른 레지스트리 키를 삭제하거나 변경하지 않도록 합니다.
레지스트리 편집기 창을 닫습니다.
Windows Form의 Just-In-Time 디버깅 사용
기본적으로 Windows Form 앱에는 복구할 수 있는 경우 앱이 계속 실행되도록 하는 최상위 예외 처리기가 있습니다. Windows Forms 앱에서 처리되지 않은 예외를 throw하면 다음 대화 상자가 표시됩니다.
Windows Form 처리되지 않은 예외Windows Form 처리되지 않은 예외Windows Form unhandled exceptionWindows Form unhandled exception
표준 Windows Form 오류 처리 대신 Just-In-Time 디버깅을 사용하도록 설정하려면 다음 설정을 추가합니다.
system.windows.forms
또는 > 파일의 섹션에서jitDebugging
값을true
설정합니다.<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
C++ Windows Form 애플리케이션에서
DebuggableAttribute
파일이나 코드에서true
을 으로 설정합니다. /Zi을 사용하여 컴파일하고 /Og없이 진행하면, 컴파일러가 이 속성을 자동으로 설정해줍니다. 그러나 최적이 아닌 릴리스 빌드를 디버그하려면 앱의DebuggableAttribute
파일에 다음 줄을 추가하여 설정해야 합니다.[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
자세한 내용은 DebuggableAttribute참조하세요.
Just-In-Time 디버깅 사용
이 예제에서는 앱이 오류를 발생시킬 때 Just-In-Time 디버깅을 안내합니다.
다음 단계를 수행하려면 Visual Studio가 설치되어 있어야 합니다. Visual Studio가 없는 경우 무료 Visual Studio Community Edition다운로드할 수 있습니다.
Just-In-Time 디버깅이>옵션 에서 사용하도록 설정되어 있는지 확인하십시오.
이 예제에서는 Visual Studio에서 C# 콘솔 앱을 만들어 NullReferenceException예외를 발생시킵니다.
Visual Studio에서 ThrowsNullException명명된 C# 콘솔 앱(>>>>Console Application)을 만듭니다. Visual Studio에서 프로젝트를 만드는 방법에 대한 자세한 내용은 연습: 간단한 애플리케이션만들기를 참조하세요.
Visual Studio에서 프로젝트가 열리면 Program.cs 파일을 엽니다. Main() 메서드를 다음 코드로 바꿉니다. 이 코드는 콘솔에 줄을 인쇄한 다음 NullReferenceException을 throw합니다.
static void Main(string[] args) { Console.WriteLine("we will now throw a NullReferenceException"); throw new NullReferenceException("this is the exception thrown by the console app"); }
솔루션을 빌드하려면 디버그(기본값) 또는 릴리스 구성을 선택한 다음, 빌드>솔루션 다시 빌드을 선택합니다.
메모
- 전체 디버깅 환경에 대한 디버그 구성을 선택합니다.
- 릴리스 구성을 선택하는 경우, 이 절차가 작동하도록 하려면 Just My Code 기능을(를) 해제해야 합니다. 도구>옵션>디버깅아래에서 내 코드만 사용하도록선택을 취소합니다.
빌드 구성에 대한 자세한 내용은 빌드 구성 이해참조하세요.
C# 프로젝트 폴더(...\ThrowsNullException\ThrowsNullException\bin\Debug 또는 ...\ThrowsNullException\ThrowsNullException\bin\Release)에서 빌드된 앱 ThrowsNullException.exe 엽니다.
다음 명령 창이 표시됩니다.
Choose Just-In-Time 디버거 대화 상자가 열립니다.
사용 가능한 디버거아래에서, 아직 선택하지 않았다면, 기본 설정한 Visual Studio 버전/에디션<>의새 인스턴스를 선택합니다.
확인선택합니다.
ThrowsNullException 프로젝트는 Visual Studio의 새 인스턴스에서 열리고 예외를 throw한 줄에서 실행이 중지됩니다.
이 시점에서 디버깅을 시작할 수 있습니다. 실제 앱을 디버깅하는 경우 코드에서 예외를 throw하는 이유를 확인해야 합니다.
주의
앱에 신뢰할 수 없는 코드가 포함된 경우 보안 경고 대화 상자가 표시되어 디버깅을 계속할지 여부를 결정할 수 있습니다. 디버깅을 계속하기 전에 코드를 신뢰할지 여부를 결정합니다. 코드를 직접 작성했나요? 애플리케이션이 원격 컴퓨터에서 실행되는 경우 프로세스의 이름을 인식합니까? 앱이 로컬로 실행되는 경우 컴퓨터에서 악성 코드가 실행 중일 가능성을 고려합니다. 코드가 신뢰할 수 있다고 판단되면 확인선택합니다. 그렇지 않으면 취소선택합니다.
Just-In-Time 디버깅 문제 해결
Visual Studio에서 사용하도록 설정되어 있더라도 앱이 충돌할 때 Just-In-Time 디버깅이 시작되지 않는 경우:
알려진 Windows 문제로 인해 Just-In-Time 디버거가 실패할 수 있습니다.
해결 방법은 자동, DWORD 값을 값 데이터가 1인 경우 다음 레지스트리 키에 추가하는 것입니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(64비트 컴퓨터의 32비트 앱의 경우) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Windows 오류 보고가 컴퓨터의 오류 처리를 인수할 수 있습니다.
이 문제를 해결하려면 레지스트리 편집기를 사용하여, 다음 레지스트리 키에 사용 안 함DWORD 값을 추가하고, Value 데이터를 1로 설정합니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(64비트 컴퓨터의 32비트 앱의 경우) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
자세한 내용은 을 참조하세요. WER 설정을 참조하세요.
Just-In-Time 디버깅하는 동안 다음과 같은 오류 메시지가 표시될 수 있습니다.
충돌 프로세스에 연결할 수 없습니다. 지정된 프로그램이 Windows 또는 MS-DOS 프로그램이 아닙니다.
디버거가 다른 사용자에서 실행되는 프로세스에 연결하려고 했습니다.
이 문제를 해결하려면 Visual Studio에서 디버그>프로세스 연결(또는 Alt + Ctrl + 누름)을 열고 사용 가능한 프로세스 목록에서 디버그할 프로세스를 찾습니다. 프로세스의 이름을 모르는 경우 Visual Studio Just-In-Time 디버거 대화 상자에서 프로세스 ID를 찾습니다. 사용 가능한 프로세스 목록에서 프로세스를 선택한 다음 연결선택합니다. No을 선택하여 Just-In-Time 디버거 대화 상자를 닫습니다.
로그온한 사용자가 없으므로 디버거를 시작할 수 없습니다.
콘솔에 로그온한 사용자가 없으므로 Just-In-Time 디버깅 대화 상자를 표시하는 사용자 세션이 없습니다.
이 문제를 해결하려면 컴퓨터에 로그온합니다.
클래스가 등록되지 않았습니다.
디버거가 설치 문제로 인해 등록되지 않은 COM 클래스를 만들려고 했습니다.
이 문제를 해결하려면 Visual Studio 설치 관리자를 사용하여 Visual Studio 설치를 다시 설치하거나 복구합니다.