2008-09-25 2 views
4

'정상적으로'오류/예외를 분류하고 처리하는 방법을 표준화해야합니다.표준화 된 오류 분류 및 처리

나는 현재 오류 번호, 심각도 코드, 위치 정보 및 추가 정보 문자열을 전달하는 함수에 오류를보고하는 프로세스를 사용합니다. 이 함수는 오류가 치명적일 경우 앱을 종료해야하며, 그렇지 않으면 false를 반환합니다. 프로세스의 일부로 사용자에게 시각적 피드백을 제공 할뿐만 아니라이 기능은 일부 심각도 수준 이상의 로그 파일 오류도 발생시킵니다.

오류 번호는 오류 유형을 설명하는 문자열 배열을 색인합니다 (예 : '파일 액세스', '사용자 입력', '스레드 생성', '네트워크 액세스'등). 심각도 코드는 0,1,2 또는 4, 0 = 유익한, 1 = user_retry, 2 = cannot_complete, 4 = cannot_continue. 위치 정보는 모듈 &이고, 추가 정보는 매개 변수 및 지역 변수 값입니다.

나는 이것을 라이브러리에 넣고 모든 응용 프로그램에서 재사용 할 수있는 표준 오류 처리 방법으로 만들고 싶습니다. 나는 주로 리눅스에서 C/C++를 사용하지만, 결과 라이브러리를 다른 언어/플랫폼과 함께 사용하기를 원할 것이다.

  • 아이디어는 는하지만, 이것은 다음 조치가 취해지고 에는 옵션을 사용자에게 제공해서는 안 주어진 심각도 레벨에 대한 몇 가지 기본 동작을 표시하는 오류 유형 배열을 확장하는 것이다?

  • 또는 사용자가 에서 선택해야하는 옵션의 하위 배열이되어야합니까? 의 문제는이 옵션이 필요성이 일반화되어 있다는 것입니다. 프로그래밍 관련 옵션 은 최종 사용자 인 을 완전히 차단할 수 있습니다.

  • 또는 : 중 오류 또는 기본 행동 자체 배열에 따라 오류 LIB 루틴 패스를 ​​사용하는 각 응용 프로그램은한다 - 그러나 이것은 ... 라이브러리의 목적을 물리 칠 것이다

  • 또는 : 각 앱에서 심각도 수준이 으로 처리되어야합니까?

또는 무엇을 제안합니까? 어떻게 오류를 처리합니까? 어떻게 개선 할 수 있습니까?

+0

어떤 언어를 사용하십니까? –

+0

C/C++ (Linux) - 편집 된 질문에 답을 넣어 주겠다.하지만 내 목표는 모든 언어에서 사용할 라이브러리이다. (나는 perl, 어셈블러, PHP 등도 사용한다.) – slashmais

+0

와우, 내가 본 것보다 더 강력하다. –

답변

1

오류를 처리하는 방법은 실제로 응용 프로그램에 따라 다릅니다. 웹 응용 프로그램은 데스크톱 응용 프로그램과는 다른 오류 포착 메커니즘을 가지고 있으며 두 기능 모두 비동기 메시징 시스템과 크게 다릅니다.

오류 처리의 일반적인 관행은 처리 할 수있는 가능한 가장 낮은 수준에서 처리하는 것입니다. 이것은 대개 응용 프로그램 계층 또는 GUI를 의미합니다.

나는 심각도 수준을 좋아한다. 아마도 서로 다른 오류 출력 공급자 및 심각도 수준 공급자가 포함 된 플러 거블 오류 수집 라이브러리를 가질 수 있습니다.

출력 공급자에는 logginProvider 및 IgnoreErrorsProvider 같은 것이 포함될 수 있습니다. 심각도 수준은 일반적으로 심각도 수준이 발생하는 프로젝트 유형에 따라 결정되기 때문에 각 프로젝트별로 구현되는 것으로 볼 수 있습니다.예를 들어 네트워크 연결 문제는 연락처 관리 시스템보다 은행 응용 프로그램의 경우 더 심각합니다.

+0

플러그인 만들기에 좋은 아이디어 : app/language/platform이 허용하는 경우이 방법이 유용 할 수 있습니다. 코드를 이식성있게 만들 수 있습니다. 그 일을 성취하기 위해 내가 무엇을 제안하겠습니까? – slashmais

+0

나는 현재 프로젝트에 맞게 프레임 워크를 개발하고 간단하게 시작할 것입니다. 그런 다음 다른 플랫폼 (현재 응용 프로그램이 웹 응용 프로그램 인 경우 데스크톱 응용 프로그램과 같거나 그 반대)으로 프로젝트를 스파이크하고 오류 처리를 두 프로젝트에서 사용할 수있는 양식으로 리팩토링하십시오. – Gilligan

+0

하! 당신이 그런 식으로 말하려고한다는 것을 알았습니다 .- (모든 프로그래머와 마찬가지로 저는 게으르며 언제나 하느님 - 코드를 쓰고 싶습니다 : 한 번만 (유전자와 같은) 모든 곳에서 사용하기 위해) 하지만 당신 말이 맞습니다 - 그것은 리팩터링 방식입니다 , 또는 모든 구현을위한 Mother-algorithm을 생성 할 수 있습니다. – slashmais