我有这个条件了一个错误:这是Visual Studio 2010中的编译器错误吗?
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
{
CurrentObserverPathPointIndex = CurrentObserverPathPointIndex + 1;
CurrentObserverPathPointDisplacement -= lengthToNextPoint;
lengthToNextPoint = (CurrentObserverPath->pathPoints[min((PathSize - 1),CurrentObserverPathPointIndex + 1)] - CurrentObserverPath->pathPoints[CurrentObserverPathPointIndex]).length();
}
这似乎陷入一个死循环,而在发布模式。作品interstingly在调试模式罚款,或者更多的时候,我把一个调试打印的最后一行
OutputInDebug("Here");
这里是条件本身生成的汇编:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
00F074CF fcom qword ptr [dist]
00F074D2 fnstsw ax
00F074D4 test ah,5
00F074D7 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
00F074D9 mov eax,dword ptr [dontRotate]
00F074DC cmp eax,ebx
00F074DE jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
{
你可以看到,对于第二条件,它似乎将'bont类型的函数参数'dontRotate'的值移动到eax中,然后与它进行比较,但dontRotate在该代码位置附近没有使用。
我明白,这可能是一些小数据,但它似乎是个人明显的编译器错误。但令人遗憾的是,我不确定如何将它提炼成一个足以解决问题的实际产生错误报告的问题。
编辑: 不是实际的减速,但类型:
double CurrentObserverPathPointDisplacement;
double lengthToNextPoint;
int CurrentObserverPathPointIndex;
int PathSize;
vector<vector3<double>> CurrentObserverPath::pathPoints;
EDIT2:
有一次,我在调试print语句,而末尾添加,这是得到大会产生,不再表达错误:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
00B1751E fcom qword ptr [esi+208h]
00B17524 fnstsw ax
00B17526 test ah,5
00B17529 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
00B1752B mov eax,dword ptr [esi+200h]
00B17531 cmp eax,ebx
00B17533 jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
{
这看起来不像对应于任何代码的指令。 – wallyk 2012-02-22 00:17:59
首先,您可能已经缩短了一些标识符。但是,要弄清楚发生了什么,查看涉及哪些类型将会很有帮助。 – bitmask 2012-02-22 00:20:10
请包装那些过长的行。 – 2012-02-22 00:20:51