我想调试我在此处发布的问题: C++ and pin tool -- very weird DOUBLE variable issue with IF statement。 我追踪了使用gdb发生奇怪行为的时刻。下图显示了我发现的内容,它显示了显示反汇编代码和浮点指针寄存器值的gdb屏幕截图。 (放大图像here) 左侧的图像显示在突出显示的FLDZ
指令执行之前的屏幕截图,右侧图像在指令执行之后。我查找了x86 ISA,FLDZ
用于将+0.0
加载到ST(0)
中。但是,我得到的是-nan
而不是+0.0
。 有谁知道为什么会发生这种情况? 我使用的系统是运行64位CentOS的Intel xeon 5645,但我试图调试的目标程序是32位应用程序。另外,正如我在前面的文章中提到的,我尝试了两个版本的gcc,4.2.4和4.1.2,并观察到同样的问题。 谢谢。浮点指令异常 - FLDZ故障?
- 添加 - 顺便说一下,下面是源代码。
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);
}
}
看起来像一个FPU堆栈溢出。你有源代码吗? – 2012-08-08 08:46:14
看起来像'if(_partial_internal_cycles!= 0)'时出错。您的FPU堆栈在此时已满。你需要以某种方式理解这可以如何。我熟悉的编译器在完成计算后将清空FPU堆栈。你正在使用哪种编译器? – 2012-08-08 08:58:55
我同意你提出错误的地方。另外,我使用了gcc 4.2.4。 – ray 2012-08-08 09:04:05