버그 해결을 위한 모든 질문을 던져
+1 vote
163 views
크래시 리포트 수정하는데 정보가 부족해서요..

긴 함수라 쪼개고 쪼개고 쪼갰는데.. 이것 참..

throw new unhandled exception 이런식으로 던질 수 있을줄알았거든요?

안되네요..
asked (154 point) , 163 views

2 answers

+2 votes

음.. 질문을 잘 이해하지 못해서 목적을 모르겠어요..

catch 했다는 것은 Exception이 handling 되었다는 것인데

catch 문에서 다시 throw new Exception("Rethrow") 하면 안되나요?

 

using System;

class Program {
    static void Main(string[] args) {		
		Console.WriteLine(
@"
1. (caught) Should be handled
2. (caught) Rethrow"
		);
		
		try {
			handledExceptionTest();
		} catch (Exception e) {
			Console.WriteLine(e);
		}

		Console.WriteLine(
@"
1. (caught) Should be handled
2. (unexpected) Rethrow
3. exit 1"
		);

		handledExceptionTest();

		Console.WriteLine("Unreachable");
    }

	static void handledExceptionTest() {
		try {
			throw new Exception("Should be handled");
		} catch (Exception e) {
		    Console.WriteLine(e);
			throw new Exception("Retrhow");
		}
	}
}

 

answered (81 point)
asd()

try{

   qwerty()
   {

     try{

     }

    catch{

    }

   }

catch{

}

대충 이런식이라 exception에서 throw해도 밖에서 걸리는데 break문 처럼 한번에 빠져나갈 수 없나 찾아보던 차였는데요.

 

결론은 그렇게 빠져나가지는 못하니 밖의 try catch에서 다시 throw 하는걸로 했어요

여러개의 중첩된 try-catch에서 매번 핸들링 하지 않고 바로 밖으로 빠지는 방식이 필요하셨던 거군요.

이미 방법은 찾으신 것 같지만,

별도의 Exception 클래스를 만들고 새로 만든 클래스는 핸들링 하지 않도록 하는 방법은 어떠세요?

public class HandledException : Exception {
    HandledException(Exception handled) {
        InnerException = handled;
    }
}

try
{
    /// ...
    try {
        try {
            /// ...
        } catch (Exception exception) when (!(exception is HandledException)) {
            throw new HandledException(exception);
        }
    } catch (Exception exception) when (!(exception is HandledException)) {
        throw new HandledException(exception);
    }
}
catch (HandledException handled)
{
    /// ...
}

 

0 votes

애초에 예외가 사용자에게 표시되고 크래시 리포트로 전달해야할 정도가 되면 굳이 UnhandledException이라는 예외 클래스로 정보를 감출 필요가 없을것 같습니다.

try
{
    // 내용..
}
catch (CustomException e)
{
    // 예외 처리
}
catch (Exception e)
{
    // 크래시 리포트 호출
}

그래도 만약에 크래시 리포트 호출 후 실행을 중단하고 감춰진 예외를 띄워야한다면

Exception 클래스를 상속받아 UnhandledException 클래스를 만들어 던지시면 됩니다. 내부구현은 뭐... 있어도 되고 없어도 될겁니다.

answered (22 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

520 질문
675 answers
665 댓글
118,175 users