2015-03-31 40 views
0

我正在編寫一個單元測試應用程序,我想讓其中一種方法失敗。爲此,我將一個NULL參數傳遞給該方法。但是這導致下游的崩潰轉儲。那麼我們如何通過代碼禁用崩潰轉儲生成?如何在C++中以編程方式禁用崩潰轉儲?

我期待會有一些註冊表設置,可以通過代碼進行更改。

+3

需要更多的信息,操作系統的一個開始。 – a3f 2015-03-31 07:42:30

+2

然後測試工作,因爲它發現了一個錯誤。修復bug(即檢查「NULL」指針並返回失敗)而不是解決它。即使您禁用「崩潰轉儲」,崩潰仍會發生。 – 2015-03-31 07:44:42

+0

似乎更合理的問「如何控制崩潰轉儲結束的位置,以便我可以刪除它」,或者沿着這些方向 - 如果代碼崩潰,您可能確實需要使用crashdump來確定發生了什麼。 – 2015-03-31 07:48:43

回答

0

我認爲這裏的要求是不正確的。有幾個信號不能被程序本身捕獲。 SIGSEGV(當您訪問無效內存/ NULL時引發)是其中之一。沒有操作系統會暴露一個接口,你可以在程序中控制一個SIGSEGV。這將是非常糟糕的操作系統設計。

最好重寫應該檢查值的單元測試(如Joachim建議的),不要使應用程序崩潰。碰撞測試屬於系統測試,不在單元測試範圍之內。

+0

不正確。 SIGSEGV在linux上是可捕獲的。雖然爲SIGSEGV分配信號處理程序的原因之一是打印崩潰的「回溯」。 – John 2015-03-31 08:05:20

+0

SIGSEGV僅適用於應用了grsecurity補丁的Linux內核,John。這意味着它在所有發行版中都不可用。 – Peter 2015-03-31 08:59:20

相關問題