MS Visual Studio 2013。
我看到断点正在运行时移动(C ++代码)。我的C#代码中从来没有这样的行为,为什么我会用C ++做到这一点?我该如何解决?
#include <Windows.h>
int main(){
HANDLE hFile = ::CreateFile(TEXT(""), 0, 0, NULL, OPEN_EXISTING, 0, NULL);
if (INVALID_HANDLE_VALUE == hFile){
DWORD err_code = ::GetLastError();
} // In the IDE I set the breackpoint on this line for err_code value looking...
return(0); // but in runtime the breackpoint moved to this line.
// It moved back when the work finished.
}
我知道在这种情况下可以@err,hr
在“监视”窗口中设置上一次查看错误信息的方式,但是断点行为对我来说很有趣。
VS在C ++和C#中的行为有所不同。对于C ++,调试器将忽略不包含任何实际代码的行,并将不断移动断点,直到遇到包含某些代码的行为止。
某种相关的行为是,如果您尝试在发布模式下进行调试,则除非您知道发生了什么,否则许多行将被优化,甚至可以感觉到更加怪异。
这就是它的工作原理。
在您的特定情况下,您实际上并没有对错误代码做任何事情,只是将其分配给该if
语句本地的变量。在发布模式下,该行以及整个行可能if
会被优化掉,因为它没有效果。因此,您可以在下一行将值输出到控制台,或者err_code
在之前声明if
,在这种情况下,关闭后它仍然是“活动的” }
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句