전체 메시지 텍스트: 'function' 함수를 평가하는 동안 코드 'code'로 대상 프로세스가 종료되었습니다.
.NET 개체의 상태를 보다 쉽게 검사할 수 있도록 디버거는 디버그된 프로세스에서 다른 코드(일반적으로 속성 getter 메서드 및 ToString 함수)를 실행하도록 자동으로 강제합니다. 대부분의 시나리오에서 이러한 함수는 성공적으로 완료되거나 디버거에서 "catch"할 수 있는 예외 상황들을 "throw"합니다. 그러나 커널 경계를 넘거나, 사용자 메시지 펌핑이 필요하거나, 복구할 수 없기 때문에 예외를 catch할 수 없는 경우도 있습니다. 따라서 프로세스를 명시적으로 종료하는 코드(예: ExitProcess() 호출) 또는 잡을 수 없는 처리되지 않은 예외를 throw하는 코드(예: StackOverflowException)를 실행하는 속성 getter 또는 ToString 메서드는 디버그된 프로세스를 종료하고 디버그 세션을 끝냅니다. 이 오류 메시지가 발생하면 이 오류가 발생했습니다.
이 문제의 일반적인 이유 중 하나는 디버거가 자신을 호출하는 속성을 평가할 때 스택 오버플로 예외가 발생할 수 있기 때문입니다. 스택 오버플로 예외를 복구할 수 없으며 대상 프로세스가 종료됩니다.
이 오류를 해결하려면
이 문제에 대한 두 가지 가능한 해결 방법이 있습니다.
해결 방법 #1: 디버거가 getter 속성 또는 ToString 메서드를 호출하지 못하도록 방지
오류 메시지는 디버거가 호출하려고 시도한 함수의 이름을 표시합니다. 함수의 이름을 사용하여 즉각 창에서 해당 함수를 다시 평가해 디버깅할 수 있습니다. 직접 실행 창에서 평가할 때는 자동/지역/조사식 창의 암시적 평가와 달리 디버거가 처리되지 않은 예외에서 중단되므로 디버깅이 가능합니다.
이 함수를 수정할 수 있는 경우 디버거가 속성 getter 또는 ToString 메서드를 호출하지 못하도록 할 수 있습니다. 다음 중 하나를 시도합니다.
메서드를 속성 getter 또는 ToString 메서드 외에 다른 코드 형식으로 변경하면 문제가 해결됩니다.
-또는-
(For
ToString) 형식에DebuggerDisplay특성을 정의하면 디버거가ToString외의 항목을 평가하도록 할 수 있습니다.-또는-
(속성 getter의 경우) 속성에
[System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)]특성을 적용합니다. API 호환성을 위해 속성을 유지해야 하는 메서드가 있는 경우 유용할 수 있지만 실제로는 메서드여야 합니다.
이 메서드를 수정할 수 없는 경우 대체 명령에서 대상 프로세스를 중단하고 평가를 다시 시도할 수 있습니다.
해결 방법 #2: 모든 암시적 평가 사용 안 함
이전 솔루션에서 문제를 해결하지 않는 경우 속성 평가 사용 기능을 사용하지 않도록 설정할 수 있습니다.
도구>옵션 창을 열고 모든 설정>디버깅> 섹션을 확장합니다. 속성 평가 사용 및 기타 암시적 함수 호출 확인란의 선택을 취소합니다.
도구>옵션 대화 상자를 열고 디버깅> 섹션을 확장합니다. 속성 평가 사용 및 기타 암시적 함수 호출 확인란의 선택을 취소합니다.
이 변경은 대부분의 암시적 함수 평가를 사용하지 않도록 설정하며 문제를 해결해야 합니다.