gpt4 book ai didi

c++ - 为什么断点会在我的 C++ 代码中跳转?

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:33 25 4
gpt4 key购买 nike

微软 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.
}

我知道在这种情况下我可以在 Watch 窗口中设置 @err,hr 来查找最后的错误信息,但断点行为对我来说很有趣。

最佳答案

VS 与 C++ 和 C# 的行为不同。在 C++ 的情况下,调试器将忽略不包含任何实际代码的行,并将继续移动断点,直到它遇到包含一些代码的行。

一个有点相关的行为是,如果您尝试在 Release模式下调试,许多行将被优化掉,除非您知道发生了什么,否则会发现更多奇怪的东西。

这就是它的工作原理。

在您的特定情况下,您实际上并没有对错误代码做任何事情,只是将其分配给 if 语句的本地变量。在 Release模式下,该行以及可能整个 if 将被优化掉,因为它没有任何效果。因此,您可以在下一行将值输出到控制台,或者在 if 之前声明 err_code,在这种情况下,它在结束 后仍然是“alive” }

关于c++ - 为什么断点会在我的 C++ 代码中跳转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30884135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com