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

Posted

技术标签:

【中文标题】在 Visual Studio 2017 中使用断点时随机 C++ 执行流程?【英文标题】:Random C++ execution flow when using breakpoints in Visual Studio 2017? 【发布时间】:2018-09-12 02:05:44 【问题描述】:

我为以下代码在 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 将在遇到断点时打印出我的消息。执行不会停止它只会打印出我作为断点操作输入的任何文本

【问题讨论】:

Don't upload images of code on SO when asking a question。只需复制所有输入和输出文本并粘贴到此处 如果我将代码显示为文本,那么您将如何查看断点?不要因为这么小的原因而对问题投反对票。 @Vizkrig 有断点就足够了。另外,请描述“正在发生的事情”是什么。 好的。我添加了代码并删除了屏幕截图 @Swordfish 问题在于两次运行的输出不同。我已经编辑了问题并添加了每个输出日志的前 7 行,现在区别非常明显。如果我的问题起初没有意义,我很抱歉。感谢您耐心指出这一点 【参考方案1】:

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

当您在 Visual Studio 中的断点处实际中断时,您会看到这一点。一些断点似乎消失了,但几个断点只是移动到引用相同的语句。

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


编辑器视图:

调试器视图:

【讨论】:

所以你是说 break 语句的顺序对于每次运行都是随机的? @Vizkrig 是的,你最终在一行上有 2 个或更多断点,在同一行上执行多个断点没有定义的顺序

以上是关于在 Visual Studio 2017 中使用断点时随机 C++ 执行流程?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中的大括号逗号语法是啥?

在 Visual Studio 2015 中打开 Visual Studio 2017 项目

在 visual studio 中如何看它执行的步骤,

Visual studio 2017怎么注册激活

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集