2010-04-26 3 views
4

내가 직접 생성 한 모든 예외를 잡으면 빨리 검사 할 수있는 도구를 찾고 있습니다.컴파일하기 전에 C++ 코드에서 포착되지 않은 예외를 감지하는 정적 코드 분석 도구는 무엇입니까?

감사합니다.

+0

제 해결책은이 문제 때문에 부분적으로 예외를 throw하지 않는 것입니다. 그래도 행운을 빌어 요. –

+0

주 선언 다음에 throws()를 추가하면 컴파일러가이를 catch하지 않을까요? – flownt

+1

@flownt : no, 이는 런타임에 종료됨을 의미합니다. – UncleBens

답변

-2

이유는 단순히 가능한 모든 예외를 잡을 :

int main() { 
    try { 
     // your stuff 
    } 
    catch(...) { 
     // your handler 
    } 
} 
+2

아마도 예외가 어디에서 발생하는지 알 수 없으므로 à-la _catch early_? – wilhelmtell

+0

@Wilhelm 글쎄, 나는 * 늦게 붙잡을 생각하고, RAII에게 개입하는 모든 문제를 돌보게한다. –

+0

당신의 질문에 대한 대답은 아마도 세 베린이 자바를 통해 컴파일러가 오류 케이스를 처리했는지 여부를 알기 위해 선언/던져진 모든 적절하게 정의 된 예외를 잡았거나 선언했는지 여부를 알게되었을 것입니다 주어진 문맥에서. 그렇다면 최상위 캐치가 도움이되지 않습니다. Java 스타일의 정적 예외 분석이나 C++ 프로그래밍 스타일의 교육이 필요합니다. –

3

난 당신이 여기에 바람을 쫓고 있다고 생각하고, 닐 B의 대답에 코멘트// 바른 길에 당신을 둘 것이다.

절대로 예외는 아닙니다. USEFULLY을 처리 할 수있는 예외 만 잡습니다. (예 : 백업 서버에서 작업 재 시도)

C++의 거의 모든 행이 AV (배열 색인, 포인터 역 참조, 0으로 나누기 등)를 던질 수 있음을 기억하십시오. 따라서 이들 각각을 잡는 방법이 있다면, 너는 아무데도 빨리 가지 않을거야. 모든 포인터가 사용되기 전에 NULL에 대해 검사되는화물 컬트 코딩 세계로 향할 것입니다.

+0

사실, 정의되지 않은 동작을 설명합니다. 그럴 수도 있지만 Undefined Behavior는 그 자리에서 종결하는 것을 포함하여 다른 결과를 허용합니다. – MSalters

관련 문제