ゼロ信号で割った値 (SIGFPE) を常にトリガーする単体テストをコーディングする必要があるため、信号キャッチ モジュールの有無にかかわらず何が起こるかをテストして比較できます。
Linux シグナル キャッチ/レジューム モジュールが開発され、期待どおりに動作しました。モジュールの単体テストをコーディングしているときに、小さな問題が発生します。
これらは UT コードです (GTest による):
int do_div_by_0() {
int j = 0;
return 123 / j; /* During release-buidling, this div-op would be optimized out,
although it would be not when debug-building! */
};
TEST_F( SignalsHandling_F, divByZeroDying ) {
ASSERT_EXIT( {
do_div_by_0();
// never should go here!
exit( EXIT_SUCCESS );
}, KilledBySignal( SIGFPE ), "" );
};
すべてのコードがデバッグ モードでビルドされている場合、問題はありません。しかし、除算演算はリリース モードで最適化されます。その結果、SIGFPE シグナルがトリガーされることはありません。
製品コードとテスト コードの一貫性を維持するために、製品をリリースするときにすべてをリリース モードでビルドする必要があります。
シグナル SIGFPE を常にトリガーするコードを作成する方法は?
より「実際の」メソッドが存在する場合は、raise() 関数を使用したくありません。実際に SIGFPE シグナルをトリガーしたいからです。
ありがとう!私の下手な英語を許してください!