問題タブ [sigfpe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
signals - ゼロ除算による SIGFPE を無視できますか?
特定の状況で停止するために、故意にゼロ除算を実行する (そして結果を揮発性変数に格納する) プログラムがあります。ただし、ゼロ除算を実行するマクロを変更せずに、この停止を無効にできるようにしたいと考えています。
無視する方法はありますか?
使ってみました
ただし、「浮動小数点例外(コアダンプ)」というメッセージで停止します。
実際には値を使用しないので、変数に何が割り当てられているかはあまり気にしません。0、ランダム、未定義...
編集:これが最も移植性が高いわけではないことはわかっていますが、多くの異なる OS で実行される組み込みデバイスを対象としています。デフォルトの停止アクションはゼロ除算です。他のプラットフォームでは、ウォッチドッグによる再起動を強制するために別のトリックが必要です (割り込みを無効にした無限ループなど)。PC (Linux) のテスト環境で、assert などに頼らずに、0 除算での停止を無効にしたかったのです。
linux - Linux で、dlopen が SIGFPE を発行する原因は何ですか?
file
私は、32ビット実行可能ファイルとして識別される疑わしい起源のライブラリを持っています。ただし、dlopen
32 ビットの CentOS 4.4 マシンで試してみると、dlopen は で終了しSIGFPE
ます。確かに、バイナリのフォーマットに何か問題があった場合dlopen
、エラーを処理する必要がありますか?
問題は次のとおりです。dlopen が SIGFPE を発行する原因となる問題は何ですか?
floating-point - C ++ / CLI:SIGFPE、_control87、_fpreset、古いアンマネージドWatcomCアプリを.NETに移植
SIGFPE(signal()に渡される関数ポインターによって処理される)に依存して状態を変更し、特定の浮動小数点条件が発生したときにコードを正しく実行する数千行のアプリケーションがあります。ただし、マネージモードのC ++ / CLIでは、_control87はCで記述された静的ライブラリで実行されるSystem.ArithmeticExceptionを生成します。_fpresetおよび_control87はサポートされていません。
従来の管理されていないSIGFPE操作をC++/ CLIアプリケーションで機能させるにはどうすればよいですか?私のアプリケーションで浮動小数点が発生する場所の数は膨大になる可能性があり、他のプログラマーが何年も前に書いたすべての数値手法を完全には理解していません。
昔ながらの例外処理が、INF値ではなく、ゼロによる浮動小数点除算で機能するようにしたい。プラットフォーム呼び出しスタイルは機能せず、#pragma managed(off)もそのトリックを実行しません。
どのようなオプションがありますか?
c++ - コア ファイルは完全にナンセンスですか、それともこのコードは本当に SIGFPE をスローしたのでしょうか?
私のコア ファイルは、SIGFPE がスローされたと主張しています。
gcc-4.3.4/include/c++/4.3.4/bits/stl_iterator_base_funcs.h
176行目。これはここにあります:
これは私が持っている別の関数の中にあり、浮動小数点演算を行っていないコードで囲まれた事前呼び出しを実際に行っています。コードは最適化されてコンパイルされているため (デバッグ シンボルは含まれています)、非常に難読化されている可能性があります。
私のコアファイルは完全にナンセンスだと言っているだけですか、それともこれが理にかなっている方法はありますか?
c - なぜSIGFPEがあるのですか?
どういうわけか、それは以前は機能していました。しかし今、私はSIGFPEを取得します.....何が問題なのですか?
linker - グローバル シンボル `_END_' には非グローバル バインドがあります
Solaris 11_x86 システムにアプリケーションを移植しています。`make を使用してコンパイルすると、次のエラーが発生します。
これを修正するにはどうすればよいですか?
loops - gdb:ループ内のSIGFPE
ループ内でSIGFPEが発生しています。ブレークポイントを設定したり、stop、nopassなどでSIGFPEを処理したりすると、この行の後のフレーム変数が失われます。ブレークポイントの場合、最初に、を実行してそこに到達する必要がありますn N
。ここN
で、は大きな数値です。これにより、SIGFPEが発行されるような変数値が発生するまで、ループがブレークポイント上で実行されます。処理またはブレークポイントによる実行後、フレーム変数を失うため、プログラムを逆検索してさらにデバッグすることはできません(コンテキスト外の変数)。
ループ内のSIGFPEを高速に処理するにはどうすればよいですか?
ありがとう!
新しい情報:論理的な監視ポイントでプログラムを停止することは可能ですか?私は責任のあるフレームに入って、問題の変数が350の値に達することを発見しました(それはゼロよりずっと小さいはずです)。なぜしないのですか
この時点で実行を停止しますか?
c - 浮動小数点例外コア ダンプ
私は Linux シグナルの初心者です。助けてください。次のコードは、Linux 2.6 gcc で実行するとコア ダンプを取得します。
$ ./a.out
浮動小数点例外 (コアダンプ)
質問:
1. プロセス シグナル マスクがインストールされているため、40 行目で生成された「SIGFPGE」はvolatile int z = x/y;
ブロックされるべきではありませんか?
2. ブロックされていない場合、シグナル ハンドラがインストールされているため、コア ダンプの代わりに「SIGFPE」がシグナル ハンドラによってキャプチャされるべきではありませんか?
3. 行 40 をコメントアウトし、代わりにvolatile int z = x/y;
行 42 を使用すると、すべてが期待どおりに機能します。raise(SIGFPE);
ここで x/0 と raise SIGFPE の違いは何ですか?
コードは次のとおりです。
c++ - ゼロ除算は SIGFPE をスローしません
ゼロによる浮動小数点除算を実行する小さなプログラムがあるので、SIGFPE を期待しています。
実際、次の出力が得られました。
gcc バージョン 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
この場合、SIGFPE をスローするにはどうすればよいですか? FP 操作の動作はどの要因 (コンパイラ フラグ/CPU タイプなど) に依存しますか?
ありがとう
c - 'int main(){ return(0); での浮動小数点例外 ( SIGFPE )。}'
2 つの異なる Linux 環境用の単純な C プログラムを作成しようとしています。一方のデバイスではプログラムが正常に実行され、もう一方のデバイスではプログラムが浮動小数点例外を生成します。このプログラムは main から 0 を返すだけなので、スタートアップ コード (おそらく ABI) との非互換性があると思われますか?
プログラムは、次のビルド仕様で gcc でコンパイルされます。
組み込みの仕様を使用します。ターゲット: i386-redhat-linux 以下で構成: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads =posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++ ,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4. 2.0/jre --with-cpu=generic --host=i386-redhat-linux スレッド モデル: posix gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-52)
プログラムのソースは次のとおりです。
Celeron デバイスでは、このプログラムは GDB の下に以下を生成します。
以下は、何が起こっているのかを調べるのに役立つと思われる詳細です。
この問題の原因を特定するにはどうすればよいですか? libc の特定のバージョンに対して静的にリンクしてみてはどうでしょうか?
GDB で障害が発生した後、次を実行します。
私が受け取ったヘルプによると、何らかの理由で libc の起動コードが 0 で除算されているようです。
ここでの問題は、この明らかに悪い動作の原因は何ですか? 何かが他の何かと両立しないに違いない?
アセンブリ出力: