1

ゼロ信号で割った値 (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 シグナルをトリガーしたいからです。

ありがとう!私の下手な英語を許してください!

4

2 に答える 2