gpt4 book ai didi

c++ - VS2017 C++ 调试器跳过代码行

转载 作者:行者123 更新时间:2023-11-28 01:21:57 26 4
gpt4 key购买 nike

我快速搜索了一下,没有找到与此问题类似的内容。可能我不知道如何搜索这个,抱歉。

我最近从 VS2015 迁移到 VS2017(社区版)。我参与了一个用 C++ 开发的项目。有时我需要像往常一样调试。

我注意到 VS2017 上的调试器无法像在 2015 版本上那样工作。不知道是不是配置问题。

问题在于 Step over、Step Into、Step Out 没有按预期方式工作(执行代码行并移至下一个/等等)。我在这里上传了一些调试器行为的屏幕截图:https://imgur.com/a/FZSMFSJ

只需按 F10(Step Over),调试器就会那样移动(第 222->239->242->244->248->244->248->254 行),跳过中间的代码行,甚至移动向前和向后。

正如在其他图像中看到的那样,断点工作正常,并且有 2 种类型的“调试线指示器”,具有不同的消息。

如何设置 VS 选项以获得所需的调试?

最佳答案

启用优化后,编译器可以自由优化某些代码片段。例如,执行冗余分配。然而,即使禁用了所有优化,C++ 标准仍要求进行某些优化(例如某些形式的 RVO 对象初始化)。

根据您显示的代码,我认为编译器可能正在重新排序(许多)局部变量的初始化,并且可能还从它们的源代码中为它们取别名,而不是复制它们。可以想象,这样做是为了减少函数内部的内存使用,并且只要您不获取局部变量的地址或对其进行引用,它就是安全的。

此外,虽然编译器保证您的代码将像顺序执行一样运行(如您编写的那样),但大多数编译器(启用优化)会重新排序它可以保证不会出于效率原因破坏您的代码的内容。这通常是为了最大限度地减少内存访问、启用矢量化或出于特定于硬件的指令流水线原因。

关于c++ - VS2017 C++ 调试器跳过代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752144/

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