너 는 이렇게 이상 처리 코드 를 썼 니?
1834 단어 이상 처리 코드
DataSet QueryDB()
{
DataSet ds=null;
try
{
//do something
}
catch (Exception ex)
{
//
}
return ds;
}
여기 몇 가지 문제 가 있다.1:분명 합 니 다.만약 에 QueryDB 방법 에 이상 이 발생 하면 클 라 이언 트 가 알 수 없습니다.예 를 들 어 클 라 이언 트 가 QueryDB 방법 을 호출 하면 이 방법 은 null 로 돌아 갑 니 다.이것 은 데이터 베이스 에 이 데이터 가 없다 는 것 을 의미 합 니까?아니면 이상 을 던 진 거 야?
2:주석 은 존재 하지 말 아야 합 니 다.예 를 들 어 Log.Write(ex)와 같은 실제 로그 기록 코드 로 대체 되 어야 합 니 다.
3:이 방법 은 모든 이상 을 포착 합 니 다.이렇게 모든 이상 이 포착 되 었 습 니 다.이것 은 개발 에 매우 불편 합 니 다.당신 이 처리 할 수 없 는 이상 을 영원히 포착 하지 마 세 요.
4:코드 를 왜 이렇게 써 요?설명:실제 사용 자 는 잘못된 정 보 를 보고 싶 지 않 습 니 다.처음에 듣 기 에는 일리 가 있 는 것 같 습 니 다.소프트웨어 를 사용 하 는 사용자 가 없다 고 생각 하고 이상 한 것 을 던 집 니 다.하지만 이것 은 배치 후의 일 입 니 다.개발 한 프로그래머 가 이상 한 것 을 보고 싶 어 하지 않 는 것 이 아 닙 니 다.개발 할 때 자세 한 이상 정 보 를 볼 수 있다 면 버그 를 바로 잡 고 복구 할 수 있 는데 왜 기꺼이 하지 않 겠 는가?
그래서 다음 과 같이 수정 되 었 습 니 다.
DataSet QueryDB()
{
DataSet ds = null;
try
{
//do something
}
catch (Exception ex)
{
Log.Write(ex);
throw ex;
}
return ds;
}
자,이제 이상 하 게 잡 혔 고 성공 적 으로 던 졌 습 니 다.이 코드 에 문제 가 있 습 니까?
catch 구문 블록 에서 throw ex;throw 로 변경 하 는 것 이 좋 습 니 다.
.net 에서 이상 은 수정 할 수 없 기 때문에 매번 이상 이 던 져 질 때마다 이상 한 스 택 추적 정보 가 리 셋 됩 니 다.
Throw 는 스 택 추적 정 보 를 리 셋 하지 않 지만 throw ex;리 셋 됩 니 다.따라서 이상 한 위 치 를 쉽게 찾기 위해 서 는 throw ex 가 아 닌 throw 문 구 를 사용 하 는 것 이 좋 습 니 다.그렇지 않 으 면 clr 는 이상 이 catch 구문 블록 에서 던 진 것 이 라 고 생각 할 것 이다.
참고 로 처리 할 수 없 는 이상 을 포착 하지 마 세 요.앞으로 사용자 가 이상 한 정 보 를 보지 못 하 기 를 원한 다 면,
AppDomain.또는 Application 의 전역 이상 처 리 를 사용 할 수 있 습 니 다.