我在 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 中实际在断点处中断时,您可以看到这一点。一些断点似乎消失了,但有几个断点只是移动到引用相同的语句。
对于移动到引用同一语句的断点,其调试消息的顺序未定义。
编辑器 View :
调试器 View :
关于c++ - 在 Visual Studio 2017 中使用断点时随机 C++ 执行流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286476/