내가 직접 생성 한 모든 예외를 잡으면 빨리 검사 할 수있는 도구를 찾고 있습니다.컴파일하기 전에 C++ 코드에서 포착되지 않은 예외를 감지하는 정적 코드 분석 도구는 무엇입니까?
감사합니다.
내가 직접 생성 한 모든 예외를 잡으면 빨리 검사 할 수있는 도구를 찾고 있습니다.컴파일하기 전에 C++ 코드에서 포착되지 않은 예외를 감지하는 정적 코드 분석 도구는 무엇입니까?
감사합니다.
이유는 단순히 가능한 모든 예외를 잡을 :
int main() {
try {
// your stuff
}
catch(...) {
// your handler
}
}
아마도 예외가 어디에서 발생하는지 알 수 없으므로 à-la _catch early_? – wilhelmtell
@Wilhelm 글쎄, 나는 * 늦게 붙잡을 생각하고, RAII에게 개입하는 모든 문제를 돌보게한다. –
당신의 질문에 대한 대답은 아마도 세 베린이 자바를 통해 컴파일러가 오류 케이스를 처리했는지 여부를 알기 위해 선언/던져진 모든 적절하게 정의 된 예외를 잡았거나 선언했는지 여부를 알게되었을 것입니다 주어진 문맥에서. 그렇다면 최상위 캐치가 도움이되지 않습니다. Java 스타일의 정적 예외 분석이나 C++ 프로그래밍 스타일의 교육이 필요합니다. –
난 당신이 여기에 바람을 쫓고 있다고 생각하고, 닐 B의 대답에 코멘트// 바른 길에 당신을 둘 것이다.
절대로 예외는 아닙니다. USEFULLY을 처리 할 수있는 예외 만 잡습니다. (예 : 백업 서버에서 작업 재 시도)
C++의 거의 모든 행이 AV (배열 색인, 포인터 역 참조, 0으로 나누기 등)를 던질 수 있음을 기억하십시오. 따라서 이들 각각을 잡는 방법이 있다면, 너는 아무데도 빨리 가지 않을거야. 모든 포인터가 사용되기 전에 NULL에 대해 검사되는화물 컬트 코딩 세계로 향할 것입니다.
사실, 정의되지 않은 동작을 설명합니다. 그럴 수도 있지만 Undefined Behavior는 그 자리에서 종결하는 것을 포함하여 다른 결과를 허용합니다. – MSalters
제 해결책은이 문제 때문에 부분적으로 예외를 throw하지 않는 것입니다. 그래도 행운을 빌어 요. –
주 선언 다음에 throws()를 추가하면 컴파일러가이를 catch하지 않을까요? – flownt
@flownt : no, 이는 런타임에 종료됨을 의미합니다. – UncleBens