3

ユーザーからMadExceptからクラッシュレポートを受け取りました。例外は無効な浮動小数点演算でした。

ただし、奇妙な部分は、コールスタックが@FSafeDivideで停止することです。

私はグーグルをして、これが正しく除算をしなかった特定のペンティアムチップのチェックであることがわかりました。テストが失敗した場合、すべての分割はハードウェアではなくソフトウェアで行われます。コンパイラ設定でPentium-SafeFDIVオプションをオンにしています。

これがエラーの原因でしたか?また、例外クラスであるEInvalidOpがスタックオーバーフローなどである可能性があることもどこかで読みました。

あなたがそれを読みたいならば、これはメッセージを除いて狂牛病のスニピットです。

例外クラス:EInvalidOp例外メッセージ:無効な浮動小数点演算。

thread $1014 (TMyBossThread):
00403509 M5b3.exe System                @FSafeDivide
008300c9 M5b3.exe MMyWorkerThread    317 TMyBossThread.Search
0073e87a M5b3.exe MMyManagerThread 186 TMyWorkerThread.Execute
008e8c17 M5b3.exe madExcept             HookedTThreadExecute
0042c150 M5b3.exe Classes               ThreadProc
00405354 M5b3.exe System                ThreadWrapper
008e8af9 M5b3.exe madExcept             CallThreadProcSafe
008e8b63 M5b3.exe madExcept             ThreadExceptFrame
created by main thread ($864) at:
0073e828 M5b3.exe MMyManagerThread 171 TMyManagerThread.Create
4

3 に答える 3

3

まず、初期のPentium Iチップで実際に実行している人がいない限り、おそらくそのコンパイラオプションをオフにする必要があります。これは、いくつかの特定のCPUの不具合に対処するためのものであり、1995年以降に販売されたチップには問題はありませんでした。

そうは言っても、除算で無効な浮動小数点演算がある場合、特にFSafeDivideは正しい結果を生成するはずのルーチンであるため、問題はコードのどこかにある可能性があります。TMyBossThread.Searchの317行目を見て、そこで何が分割されているかを確認してください。スタックトレースは、気になる行の次の行を指すことがあるため、行316も確認してください。

于 2010-09-09T23:33:20.320 に答える
1

干し草の山を検索する前に、いくつかのコメント:

  • 「再現性がない場合、それはバグではなく異常です」。何を、なぜ、どのように再現するかについて時間を無駄にしないでください。
  • メイソンが言ったように、おそらくこのコンパイラオプションを削除する時が来ました。(D6はほぼ10歳です)
  • それが特定のWindowsバージョンで発生するかどうか知っていますか?たとえば、XPでうまく機能するText-To-Speechは、Vista以降では「浮動小数点のゼロ除算エラー」を示します。
  • コードが正常に見えるとすると、浮動小数点演算を伴うと呼ばれるものは何ですか?

最後の2つは、FPUレジスタが台無しになっている問題を示しています。.Netと
の相互運用については、 こことOpenGLのSet8087CWのヘルプを参照してください。

于 2010-09-10T00:41:03.340 に答える
1

この(ドイツ語)記事では、Pentium(tm)セーフディバイド($ U +)をオンにすると、DEPが有効になっているWindows2003Serverシステムでのデータ実行防止エラーが修正された場合について説明します。

http://entwickler-forum.de/archive/index.php/t-41207.html

Delphi 2009には、デフォルトの$ U-(Pentium(tm)セーフな除算なし)のこのコンパイラフラグがまだあります。

そのため、ハードウェア関連の部分(CPUの破損)を忘れても、DEPなどのオペレーティングシステムの「機能」によっては違いが生じる可能性があります。

于 2012-06-22T13:52:50.580 に答える