Debugging C++/CLI似乎跳过了一行代码,调试没有显示该行中声明和定义的变量 我在C++或CLI和C++中开发了几个月,但是我觉得编程语言在这个问题上不重要。

Debugging C++/CLI似乎跳过了一行代码,调试没有显示该行中声明和定义的变量 我在C++或CLI和C++中开发了几个月,但是我觉得编程语言在这个问题上不重要。,debugging,c++-cli,clr,Debugging,C++ Cli,Clr,在下面的代码行中,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

在下面的代码行中,
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;
    }
}
//双k=1.0;
if(xEnd-xStart==0)
{
所选=真;
返回true;
}
//检查Y坐标是否对应于X坐标
其他的
{
//计算直线的斜率
双k=(yEnd-yStart)/(xEnd-xStart);
if(晶圆厂(y-(yStart+k*(x-xStart))<(双)选择公差)
{
所选=真;
返回true;
}
}
我试着用F11一行一行地调试它,还设置了断点,尽管当运行调试器时,这些断点会从上述行移动到
if(fabs(y-(yStart+k*(x-xStart))<(double)selectionTolerance)

我已签入VisualStudio的选项,不跳过属性/操作,但也没有帮助。当调试器在if停止程序时,我看不到
k
的任何值,但可以看到所有其他值,没有问题(除了char selectionTolerance和bool selected,它们都是双精度的)

谢谢你的帮助,我在网上和stackoverflow上搜索了很长时间,但是没有找到像这样简单(可能是一般)的问题

更新: 多亏了David Yaw和Gk,我才能够看到K的值。我仍然对这里说明的一个问题感到困惑: (尚未发布图像)

即使
yEnd
yStart
xEnd
xStart
都是
double
类型,并且具有上图中所示的值,当程序在执行
k=ydif/xdif之前停在第254行时
k
等于
0.0000000000000000
。我加了三行

双ydif=(yEnd YStart)
双xdif=xEnd xStart
k=ydif/xdif

要查看if
k
,将根据需要计算,但再次按F11后得到相同的值(程序在第256行停止)

我在这里发现了一个与跳转断点问题相关的问题:


以我尝试的方式计算
k
有什么问题,正确的方法是什么?

您没有提到计算不正确,只是代码行没有被击中。我假设计算是正确的

局部变量可能是由编译器优化的。由于您只在一个点中使用了
k
,因此它在
if
语句中消除了局部变量,并进行了内联斜率计算


我看到C++/CLI编译器在方法调用方面做了类似的事情:我遇到了异常,堆栈跟踪列出了我没有调用的方法:我调用的方法是内联的,堆栈跟踪指向它调用的方法

>我使用Visual Studio 10 C++编译器。调试配置在调试/Gm/Od/RTCs/Zi/LDd时使用以下命令行开关对不起,我不记得每个开关都做了什么。您可以在CLI中运行编译器,并获得所有命令行开关的功能列表。这些基本上是所有优化的转折点。

是启用优化还是禁用优化?@BenVoigt:谢谢你的提示!它现在被禁用了-我已经更新了问题。非常感谢您的帮助,很抱歉反应太晚,直到今天才能够测试它(还研究了您在回答中提到的主题)。“k”的计算与我预期的不同,部分问题仍然存在。“k”似乎是在多个位置内联计算的。感谢您的帮助,我了解了一些编译器的工作!我发现这与你写的有关:-我现在可以看到值了。我还不能投票,但一旦我被允许,我会投票。