ここに以前に投稿した問題をデバッグしようとしています:
C++ と pin ツール - 非常に奇妙な DOUBLE variable issue with IF statement。gdbを使用して、奇妙な動作が発生した瞬間を追跡しました。私が見つけたものは、逆アセンブルされたコードと浮動ポインターレジスター値を表示する gdb スクリーンショットを示す下の図に示されています。(拡大画像はこちら)
左側の画像は、強調表示
FLDZ
された命令が実行される前のスクリーンショットを示し、右側の画像は命令が実行された後のスクリーンショットを示しています。x86 ISA を調べたところ、FLDZ
にロード+0.0
するためのものST(0)
です。しかし、私が得るのは-nan
代わりに+0.0
. なぜこれが起こるのか誰か知っていますか?私が使用しているシステムは、64 ビット CentOS を実行する Intel xeon 5645 ですが、デバッグしようとしているターゲット プログラムは 32 ビット アプリケーションです。また、以前の投稿で述べたように、4.2.4 と 4.1.2 の 2 つのバージョンの gcc を試したところ、同じ問題が発生しました。ありがとう。
--追記-- ちなみに以下がソースコードです。
void Router::Evaluate( )
{
if (_id == 0) aaa++;
if ( _partial_internal_cycles != 0 )
{
aaa += 12345;
cout << "this is not a zero : " << endl;
on = true;
}
_partial_internal_cycles += (double) 1.0;
if ( _partial_internal_cycles >= (double)1.0 ) {
_InternalStep( );
_partial_internal_cycles -= (double)1.0;
}
if (GetSimTime() > 8646000 && _id == 0) cout << "aaa = " << aaa << endl;
if ( on)
{
cout << "break. id = " << _id << endl;
assert(false);
}
}