我现在只用C ++ / CLI和C ++开发了几个月,但在我看来,编程语言在这个问题上应该无关紧要。
在以下代码行中,double k = (yEnd - yStart) / (xEnd - xStart);
似乎未执行。
//double k = 1.0;
if (xEnd - xStart == 0)
{
selected = true;
return true;
}
// Checks if Y-coordinate corresponds to X-coordinate
else
{
// Calculating the slope of the line
double k = (yEnd - yStart) / (xEnd - xStart);
if (fabs(y - (yStart + k * (x - xStart))) < (double)selectionTolerance)
{
selected = true;
return true;
}
}
我尝试使用F11逐行调试它并且还设置了断点,尽管这些断点在将调试器从所述行运行到if (fabs(y - (yStart + k * (x - xStart))) < (double)selectionTolerance)
之后移动。
我已经检查了Visual Studio的选项,不要跳过属性/操作,但它也没有帮助。当调试器在if处停止程序时,我看不到k
的任何值,但可以看到所有其他的没有问题(除了char selectionTolerance和bool选择,它们都是双倍的)。
感谢您的帮助,我已经搜索了网络和stackoverflow很长一段时间但是找不到像这样简单(可能是一般)的行的问题。
感谢David Yaw和G K,我能够看到k的价值。我仍然对这里所说的问题感到困惑: http://i.imgur.com/MyVGTwJ.png(尚未发布图片)
即使yEnd
,yStart
,xEnd
,xStart
都是double
类型,并且具有上图所示的值,程序在执行k=ydif/xdif;
之前在第254行停止,k
等于0.0000000000000000
。我添加了三行
double ydif =(yEnd-YStart);
double xdif = xEnd-xStart;
K = ydif / xdif;
查看if k
是否按需要计算,但在再次按F11后它会得到相同的值(程序在第256行停止)。
我在这里找到了一个与跳跃断点问题相关的问题:Visual Studio breakpoints being moved
计算k
我尝试的方式有什么问题,以及正确的方法是什么?
答案 0 :(得分:1)
你没有提到计算错误,只是代码行没有被击中。我假设计算是正确的。
编译器可能优化了局部变量。由于您在一个点中仅使用k
,因此它消除了局部变量,并在if
语句中进行了内联斜率计算。
我已经看到C ++ / CLI编译器使用方法调用执行类似的操作:我有一些例外,其中堆栈跟踪列出了我不调用的方法:我调用的方法是内联的,并且堆栈跟踪指向它调用的方法。
答案 1 :(得分:0)
我正在使用Visual Studio 10.0 C ++编译器。调试配置在调试/ Gm / Od / RTC / Zi / LDd时使用以下命令行开关抱歉,我不记得每个都做了什么。您可以在CLI中运行编译器并获取所有命令行开关的功能列表。那些基本上是所有优化的转折点。