2017-04-22 120 views
0

Coverity開始識別C++ 11 noexceptthrow(), 它在調用第三方庫 (如Boost)的代碼中產生虛假的誤報。此外,一些代碼故意意圖在異常 上崩潰,因爲這種情況下的異常是不可恢復的,不合同的或錯誤的。如何建模忽略Coverity掃描C++'noexcept'誤報?

一個例子對於這種情況Coverity的報告是:

CID 178772(1#1):未捕獲異常(UNCAUGHT_EXCEPT)exn_spec_violation:升壓型的例外:: exception_detail :: clone_impl>拋出但拋出列表throw()不允許拋出。這將導致通常調用terminate()的意外調用()。

什麼是建模文件提交Coverity掃描忽略noexcept全球?

回答

0

如果編輯user_nodefs.h文件(默認是不存在的,是由CONFIGS引用的,應在同一個目錄中存在作爲coverity_config.xml),你可以簡單地添加#define noexcept(x) - 這會變成noexcept()到一個空的定義將因此什麼都不做。

您是否考慮過使用組件從視圖中排除第三方缺陷?

+0

提交是通過Travis-CI集成, 完成的,所以我不確定「coverity_config.xml」的位置。 –

+0

由於在代碼中允許使用「noexcept」和「noexcept(...)」,「defanging」方法有問題 。 如何使用單個宏解決它們兩個問題? –

+0

這有點困難(對於任何宏問題,答案都是一樣的)。你可以嘗試使用ppp_translator--你可以通過'--xml-option'指定'cov-configure'。例如,'cov-configure ...'--xml-option = append_arg: - ppp_translator = replace/noexcept \ s *(\(。* \))?/''。 ppp_translator採用正則表達式並在預處理器生效之前應用(ppp代表'pre-pre-process'),因此您也可以使用它來將代碼按摩到更加宏觀友好的形式。 – Caleb