VS2017 C++调试器跳过代码行
VS2017 C++ debugger skipping lines of code
我做了一个快速搜索,没有找到与这个问题类似的内容。也许我不知道如何搜索这个,对不起。
我最近从VS2015转移到VS2017(社区版)。我参与了一个项目,我在C++开发。有时我需要像往常一样进行调试。
我注意到VS2017上的调试器无法像2015版本那样工作。我不知道这是否是配置问题。
问题是"步过"、"步入"、"步出"没有按预期的方式工作(执行代码行并移动到下一行/等等)。我在这里上传了一些调试器行为的屏幕截图:https://i.stack.imgur.com/3V1R5.jpg
只需按 F10(单步跳过),调试器就会向该方向移动(第 222->239->242->244->248->244->248->254 行),跳过两者之间的代码行,甚至向前和向后移动。
如其他图像所示,断点工作正常,并且有 2 种类型的"调试行指示器",具有不同的消息。
如何设置 VS 选项以获取所需的调试?
启用优化后,编译器可以自由地优化某些代码段。例如,执行冗余分配。但是,即使禁用了所有优化,C++标准也要求进行某些优化(例如,某些形式的RVO对象初始化)。
从您显示的代码来看,我想说编译器很可能正在对(许多)局部变量的初始化进行重新排序,并且还可能从它们的源中对它们进行别名而不是复制它们。可以想象,这样做是为了减少函数内部的内存使用量,并且只要您不获取局部变量的地址或引用它,这是安全的。
此外,尽管编译器保证您的代码将像按顺序执行一样运行(如您所编写的那样),但大多数编译器(启用了优化)会重新排序它可以保证不会出于效率原因破坏代码的内容。这样做通常是为了最大限度地减少内存访问、启用矢量化或出于特定于硬件的指令流水线原因。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值