在 Visual Studio 2017 中使用断点时的随机 C++ 执行流程?

Random C++ execution flow when using breakpoints in Visual Studio 2017?

我在 visual studio 2017 社区版中为以下代码的每一行添加了断点

#include "pch.h"
#include <iostream> 
using namespace std;

// base class 
class Vehicle {
public:
    Vehicle()
    {
        cout << " **** This is a Vehicle **** " << endl;
    }
};

// sub class derived from two base classes 
class Car : public Vehicle {

};

// main function 
int main()
{
    // creating object of sub class will 
    // invoke the constructor of base classes 
    Car obj;
    return 0;
}

这里设置了一个动作,当每行执行时打印调试文本。

我构建程序然后 运行 一个新的调试实例。我明白了

输出 #1:前 7 行

main function
class car
blank line inside car class
// sub class derived
vehicle class closed
blank line after car class
// main

然后我重建程序和运行一个新实例,然后我得到了这个

输出 #2:前 7 行

main function bracket open
// main
car class close
class car
blank line inside car class
blank line after car class
blank line after vehicle class

我关闭了优化。

我是 C++ 的新手,想知道为什么会这样,是编译方式不同还是断点操作执行有问题?

编辑:我在屏幕截图中添加了输出的前 7 行。在那里您可以看到两次运行的断点操作的执行顺序不同。

注意:请注意,您看到的输出行是我使用断点 -> 操作功能添加的,这样 Visual studio 将打印出我的消息该断点被击中。执行不会停止它只会打印出我作为断点操作输入的任何文本

您在许多行上设置了断点,这些断点实际上并不代表可执行代码。当应用程序执行时,这些断点被移动到最近的可执行语句。

当你真正在 Visual Studio 中的断点处中断时,你可以看到。一些断点似乎没有了,但几个断点只是移动到引用同一条语句。

对于移动到引用相同语句的断点,它们的调试消息的顺序未定义。


编辑器视图:

调试器视图: