我知道,在发布版本中单步执行代码会导致指示当前代码执行点的箭头跳过一些(至少表面上)怪异和误导地方。我的问题是:有没有什么可以预测和理解的东西可以读懂,哪些可能有助于解决仅在发布版本中发生的问题,但不能在调试版本中解决问题?Visual Studio C++在发布版本中单步执行代码
具体的例子,我试图去底部:(工程调试,而不是在释放)
void Function1(void)
{
if (someGlobalCondition)
Function2(10);
else
Function2();
}
void Function2(const int parameter = 1) // see note below
{
DoTheActualWork(); // any code at all
}
// and finally lets call Function1() from somewhere...
Function1();
注:为简便起见,我跳过这两个功能在头部声明的事实文件,并在.cpp文件中单独实现。因此Function2()
中的默认参数表示法已经有了一些自由度。确定 - 如此在调试,这工作得很好。在发行版中,即使对someGlobalCondition
有明确的依赖,代码指针始终会完全跳过Function1()
的主体,并直接执行Function2()
,但始终使用默认参数(并且始终使用10
)。这种暗示Function1()
正在编译时被优化......但是有没有得出这样结论的基础?有什么方法可以确定发布版本是否真的检查过someGlobalCondition
?
P.S. (1)不,这不是一个XY问题。我给出Y的上下文,这样我可以让问题X更有意义。 (2)不,我不会发布我的实际代码,因为这会强调Y这个问题,这个问题对除我以外的任何人都有非常低的价值,而X问题是多年来一直困扰我(可能还有其他人)的问题。
尝试在'someGlobalCondition'中设置易变的变量 – 2014-09-22 05:20:41
对于Y问题,我已经提出了很好的建议,即使它并不适用于我的情况。但...我真的不能强调,我想知道在哪里可以找到有用的文档,可以照亮X问题。 – omatai 2014-09-22 21:40:45
函数'Function2'执行依赖于'parameter'吗? – 2014-09-22 22:27:11