2011-02-03 5 views
5

C++, Java, C#과 같은 프로그래밍 언어에서 응용 프로그램의 오류를 처리하는 가장 좋은 방법이 무엇인지 궁금합니다.모범 사례 오류 처리

오류 및 경고 메시지와 관련된 번호를 저장할 위치를 만드는 것을 생각했습니다.

예 :

10000 -> "파일을 읽을 수 없습니다." ... 20000 -> "버퍼 오버 플로우". ... 80000 -> "중요한 항목".

숫자를 오류와 매핑하는 것이 좋습니다. 표시되는 언어에 상관없이 오류를 쉽게 찾을 수 있습니다. 너희들은 그것에 대해 어떻게 생각하니? 그것을하는 더 좋은 방법이 있습니까?

또 다른 요점은 저장하는 방법, 만드는 방법입니다.

큰 일반 열거 형은 좋은 해결책입니까? 그것들을 데이터베이스에 저장해야합니까? 파일에?

이 있어야한다 :

  • 쉬운 코드에서 오류를 찾기 위해 (즉, 숫자에서.).
  • 새 오류를 쉽게 추가 할 수 있습니다 (동일한 오류 번호를 사용하지 않는 것이 같은 위치에 있지 않으면 두 번 힘들 수 있습니다).

여러분 모두에 대해 어떻게 생각하십니까?

도움과 조언을 미리 보내 주셔서 감사합니다.

답변

6

오류 코드를 사용하여 예외를 식별하는 것은 좋지 않습니다.

프로덕션 환경에서 로그 파일을 짧게 유지하는 데 매우 유용 할 수 있으며 오류 메시지를 국제화하는 데 사용할 수도 있습니다.

한편, 개발할 때 의미있는 설명이 포함 된 완전한 오류 메시지 대신 오류 코드를 수신하는 것이 성가신 일입니다. 개발자가 가서 오류 코드가 무엇인지 확인해야합니다.

내 프로젝트 (Java 사용) 중 하나에서 하이브리드 방식을 개발했습니다. 내 루트 예외에는 Enum 클래스를 사용하는 생성자가 있습니다. Enum 클래스에는 오류 코드 + 기본 오류 메시지 목록이 들어 있습니다. 뭔가 같은 :

public enum ErrorCodes { 

    VALIDATION_ERROR(5001, "One of the objects cannot be validated"), 
    RESOURCE_NOT_FOUND(4004, "The requested resource does not exist"), 

루트 예외는 개발자가 기본 메시지 오버라이드 (override) 할 수 있도록, 다른 생성자가 있습니다 :

public CoreException(ErrorCodes _errorCode, final String message, final Throwable cause) { 
    super(message, cause); 
    errorCode = _errorCode.getCode(); 
} 


public CoreException(ErrorCodes _errorCode, final String message) { 
    super(message); 
    errorCode = _errorCode.getCode(); 
} 

예외가 예외 핸들러가 결정할 수 있습니다 잡힌 (일부 구성에 따라 설정)을 사용하여 오류와 메시지 또는 오류 만 기록합니다. 보다 정교한 오류 처리기는 오류 코드를 기반으로 자원 번들에서 특정 언어의 메시지를 조회 할 수도 있습니다.

+0

그래, 정확히 내가 찾고 있던 것입니다. 숫자 만 표시하고 싶지는 않습니다. 관련 오류를 찾는 것이 너무 어려울 것입니다. 하지만 숫자와 이해할 수있는 텍스트를 모두 표시하려고합니다. 어떤 점에서이 방법을 사용하면 외국어 텍스트로 캡쳐 화면을 얻을 수 있습니다. 오류 번호와 일치하는 숫자가 남아 있습니다! 우리는 실제로 당신과 같은 숫자와 기본 텍스트를 생각하고 있습니다. 그것은 다른 방식으로 구현되었지만 아이디어는 동일하게 유지됩니다! 귀하의 답변 주셔서 감사합니다! –

0

하지 마십시오.

C 및 FORTRAN보다 우수한 도구가 있습니다.

예외를 던지고 이름을 지정하십시오. C#과 Java는 호출 스택을 제공합니다.

C++에서 예외 유형을 알 수 있습니다 (간신히)

+2

생산 모니터링은 어떻습니까? 오류 코드는 여러 구성 요소가있는 대형 응용 프로그램을 배포 할 때 중요합니다. 정상적인 프로덕션 환경에서는 로그를 모니터링하여 특정 문자열 (대부분의 시간에 오류 코드)을 찾고 그에 따라 행동합니다. 또한 수백 개의 Exception 클래스로 끝내고 싶습니까? –