繁体   English   中英

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

[英]VS2017 C++ debugger skipping lines of code

我进行了快速搜索,没有发现与此问题类似的东西。 抱歉,也许我不知道该如何搜索。

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

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

问题是单步执行,步入,跳出无法按预期方式工作(执行代码行并移至下一个/ etc)。 我在这里上传了一些调试器行为的屏幕截图: https : //imgur.com/a/FZSMFSJ

只需按F10(单步执行),调试器就会以这种方式移动(第222-> 239-> 242-> 244-> 248-> 244-> 248-> 254行),跳过它们之间的代码行,甚至向前和向后移动。

从其他图像中可以看到,断点可以正常工作,并且有两种类型的“调试行指示器”,它们具有不同的消息。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM