2017-04-22 46 views
0

Coverity가 C++ 11 noexceptthrow(), 으로 인식하기 시작하여 Boost와 같은 타사 라이브러리 을 호출하는 코드에 허위 오 탐지가 발생합니다. 또한 일부 코드는 의도적으로 예외 에서 충돌을 일으 킵니다.이 경우 예외는 복구 할 수 없거나 계약이 잘못되거나 버그가 발생하기 때문입니다. 이 경우에 대한Coverity를 ​​무시하는 모델 작성 방법 C++ 'noexcept'false-positives?

예 커버 리티 보고서는 다음과 같습니다

CID 178,772 (1 # 1) : catch되지 않은 예외 (UNCAUGHT_EXCEPT) exn_spec_violation : 형 부스트의 예외 :: exception_detail :: clone_impl> 발생 되나 throw 목록 throw()는 throw 될 수 없도록합니다. 이것은 통상 terminate()를 호출하는 unexpected()를 호출합니다.

전 세계적으로 noexcept을 무시하도록 Coverity 검사에 제출할 모델링 파일은 무엇입니까?

답변

0

당신이 user_nodefs.h 파일을 편집 할 경우, 당신은 단순히 #define noexcept(x)을 추가 할 수 있습니다 (기본적으로 존재하지 않습니다는 CONFIGS에 의해 참조되는, 당신의 coverity_config.xml과 같은 디렉토리에 있어야합니다) -이 그 뜻을 정의 빈에 noexcept() 바뀝니다 그러므로 아무 것도하지 마라.

보기에서 제 3 자 결함을 제외시키기 위해 구성 요소를 사용 해본 적이 있습니까?

+0

제출은 Travis-CI 통합 을 통해 이루어 지므로''coverity_config.xml''이 어디에 있는지 확실하지 않습니다. –

+0

"defanging"접근법은 코드에서 "noexcept"와 "noexcept (...)"가 허용되기 때문에 에 문제가 있습니다. 두 매크로를 단일 매크로로 defang하는 방법은 무엇입니까? –

+0

좀 더 어렵습니다. (대답은 모든 매크로 질문에서 동일합니다.) 대신에 ppp_translator를 사용해 볼 수도 있습니다 - 이것을'--xml-option'을 통해'cov-configure '에 지정할 수 있습니다. 예를 들어, 'cov-configure ...'- xml-option = append_arg : - ppp_translator =/noexcept \ s * (\ (. * \))?/''. ppp_translator는 정규 표현식을 취하고 전 처리기가 적용되기 전에 적용됩니다 (ppp는 'pre-pre-process'를 의미 함). 따라서 코드를 매크로 친화적 인 형태로 마사지 할 수도 있습니다. – Caleb