어떤 이유로 든 예외를 포착하는 콘솔 응용 프로그램을 컴파일 중입니다. 테스트로, 나는 넣어 다음VB.NET Try/Catch가 런타임에 예외를 catch하지 않습니다.
Sub Main()
Try
Log = New LogWriter("C:\app.log")
Log.Log("Test:")
Dim a As Single = 5/0
Dim b As Object
Log.Log(b.ToString)
Catch exTest As Exception
Log.Log("Caught exception")
End Try
End Sub
그래서 (LogWriter 내가 출력 로그 제어하기 위해 작성한 사용자 정의 클래스 임) 내가 대상 컴퓨터에서 컴파일 된 EXE (비주얼 스튜디오로 실행하면 어떤 일이 발생)? 로그에서 "Test :"줄을 얻은 다음
처리되지 않은 예외 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
왜? 예외 처리를 비활성화하려면 어떻게해야합니까?
'Log' 객체가 어떻게 든 결함이있어'Log.Log' 자체가 NRE를 던집니까? 첫 번째 호출은 catch 될 예외를 throw하지만 Catch 처리기 자체의 호출은 다른 예외를 throw하고 catch되지 않습니다. – supercat
이것은 모두 완전히 정상이며 b가 Nothing이기 때문에 b.ToString() 메서드는 NRE로 실패합니다. 만약 당신이 제로에서 예외를 얻고 싶다면 그것은 유휴 희망이었습니다. 그것은 유효하고 잘 정의 된 Infinity 결과를 가지고 있습니다. 이후. –
예, 예외를 생성하기 위해이 두 줄을 넣었습니다. 문제는 catch가 catch하지 않는다는 것입니다. 저를 미치게 만들었습니다. 왜 Try/Catch가 프로젝트 전체에서 더 이상 작동하지 않는지 알 수 없습니다. 나는 새로운 프로젝트를 만들고, 모든 코드를 추가했으며, 같은 행동을 보였다. 그러나 동일한 솔루션에서 새로운 코드로 새로운 프로젝트를 만들면 Catch 블록에서 예외를 catch하고 처리합니다. Try/Catch를 제거하고 On Error GoTo를 사용하면 예외가 catch됩니다. –