7

x86 Linux で浮動小数点例外 (シグナル) を C++ 例外に変換することは可能ですか?

これはデバッグ用であるため、移植性や不完全性は問題ありません (たとえば、すべてのデストラクタが呼び出されることが 100% 保証されていない場合)。

4

5 に答える 5

8

C++ 標準ライブラリの実装が TR1 関数 fetestexceptをサポートferaiseexceptしている場合feclearexcept(私のものはまだサポートしていないため、これをテストできません)、5 種類の浮動小数点エラーを検出して、必要な例外をスローできます。

これらの機能の説明については、こちらを参照してください。

サンプル コードを使用したこれらの関数の優れた説明については、The C++ Standard Library Extensions: A Tutorial and Reference by Pete Becker (ISBN-13: 9780321412997)のセクション 12.3「Managing the Floating Point Environment」もお勧めします。

代替テキスト

于 2008-09-18T00:08:18.283 に答える
3

gcc オプション-fnon-call-exceptionsが役に立つかもしれません。ただし、それに関するドキュメントが見つからなかったため、マイレージは異なる場合があります。

于 2008-09-17T20:58:20.860 に答える
3

シグナルと例外の仕組みにより、シグナルがスローされたときにすぐに実行することはできません。例外は、シグナル ハンドラーが呼び出されたときに真ではないスタックの特定の側面に依存しています。

シグナル ハンドラーでグローバル変数を設定し、プログラムの重要なポイントでこれをチェックして、設定されている場合は例外をスローすることができます。ただし、これはスローされた例外に関する正確な情報を提供しません。

于 2008-09-17T17:43:23.030 に答える
1

既成の解決策はありませんが、シグナルを見ることができるものの1つです(それらからC++例外を安全にスローできるかどうかはわかりませんが、とにかくデバッグに役立つはずです.)

SIGFPE のシグナル ハンドラーをインストールし、それをデバッグ目的で使用できます。

于 2008-09-17T17:46:22.803 に答える
0

基本的な考え方は、浮動小数点例外用の適切なシグナル ハンドラをインストールすることです。シグナルハンドラー内で、例外をスローできます(または、ユーザー定義のシグナルを別のプロセスに送信して例外を発生させるか、別のスレッドにメッセージを送信して同様のことを行うなど)。実際に例外をスローする方法はいくつもあります - 主なことはシグナルを処理することです。

于 2008-09-17T17:49:21.237 に答える