C++ 调试太深入我的代码

C++ 调试太深入我的代码,c++,debugging,C++,Debugging,我目前正在使用Visual Studio 2013。我以前从未使用过C++调试器,但我一直都在使用它来编程MSP430。无论如何,我正在尝试重新开始编程,并尝试使用调试器逐步完成代码并遵循if/else语句的逻辑。当我尝试使用调试器来完成这一点时,一旦它开始进入所有的预置C++代码,例如IF、IDEAL、ECT等。我试图让我的调试器忽略所有标准的C++幕后细节,然后只需通过我的代码。我搞砸了微软的“我的代码专用”功能,但似乎无法让它实现我的愿望。最糟糕的情况是,我想我必须在我想通过的第二行之后设

我目前正在使用Visual Studio 2013。我以前从未使用过C++调试器,但我一直都在使用它来编程MSP430。无论如何,我正在尝试重新开始编程,并尝试使用调试器逐步完成代码并遵循if/else语句的逻辑。当我尝试使用调试器来完成这一点时,一旦它开始进入所有的预置C++代码,例如IF、IDEAL、ECT等。我试图让我的调试器忽略所有标准的C++幕后细节,然后只需通过我的代码。我搞砸了微软的“我的代码专用”功能,但似乎无法让它实现我的愿望。最糟糕的情况是,我想我必须在我想通过的第二行之后设置一个断点,但我很好奇是否有更简单的方法。谢谢

更新:

下面是我用来测试您的建议的示例代码

#include <iostream>
#include <string>

using namespace std;

int main(){

cout << "line one\n";
cout << "line one\n";
cout << "line one\n";
cout << "line one\n";
cout << "line one\n";
cout << "line one\n";
cout << "line one\n";
cout << "line one\n\n";

string input;
cin >> input;

cout << "line one";
cout << "line one";
cout << "line one";
return 0;
}
没有什么好看的,但是我试着从第一个cout语句开始,看到它显示在我的控制台窗口中,点击一个按钮,让它显示下一个cout语句,重复,重复

我确信我只是没有正确地实施这些建议。当我尝试step-out方法时,它会运行我所有的cout语句。这仅仅是因为我试图执行cout操作,而不是逻辑树,比如if/whiles/ect

这是一个不合逻辑的混乱,我正试图用这个方法来追踪我在逻辑中的路径。这是一段相当糟糕的代码,但在我废弃它并重写它之前,我正试图找出如何一步一步地通过它并跟踪混乱

#include <iostream>
#include <string>

using namespace std;

int main(){

string action;
bool running = 1;
int turn = 1;

while (running){
    //display map

    if (turn == 1){
    //ask for user input
    cout << "Choose a planet (ex: A1 or D4) or END turn: ";
    cin >> action;

    if (action == "END"){

        if (turn == 1){
            turn = 2;
        }
        else {
            turn = 1;
        }

    }
    }
    else{
        cout << "It is not your turn";
        turn = 2;
    }

    //change players turn
}
return 0;
}

我正在尝试逐步遍历我的嵌套条件,因为当我运行代码时,它只是打印出来,永远不会轮到你。我很确定我知道它这样做的真正原因,但调试这段代码并不是问题的目的

使用MSVC debugger单步执行代码时,在设置断点或启动调试器并以某种方式暂停程序后,通常会使用两个选项:

进入快捷方式F11 跳出快捷方式F10 第一种方法详细地进入函数调用、运算符重写、对象构造,直到所有操作都完成后才离开指令,而第二种方法则是您想要的:一种高级概述,它只跳过所有可以分解指令的操作并跳到下一条指令

Just my code过去只是一个托管功能,但现在已经不再是了。这有助于避免堆栈跟踪中出现大量不必要的条目,但“步进”和“步出”机制仍然有效

编辑:如果您的应用程序是在调试模式下编译的,则上述操作有效。发布模式是针对..的优化版本。。好向最终用户发布程序。这意味着它将没有调试信息,因此设置断点将无法按预期工作

对于上述代码:

确保您是在调试模式下编译,您可以通过进入项目属性来更改此设置

在主函数的第一条语句上放置断点

启动调试器

当执行在放置断点的行上停止时,按F10键转到下一条指令


请注意,当您跨过控制台输入操作以允许您在终端屏幕上输入数字时,执行将传递给程序。输入换行符后,它将立即在调试器中恢复。

除了在进入不感兴趣的运算符、new或accessor后立即退出外,还有一个上下文菜单项“进入…”。。。这将弹出一个对话框,询问您实际想要进入哪个函数。我的经验是,当这种方法起作用时,它通常有点不稳定,它将允许您完全绕过在调用感兴趣的函数调用之前使用的其他getter、操作符等


但是,有时最简单的方法是在要单步执行的函数中设置断点,然后继续。如果我需要反复做,我发现这是最好的方法

在高级别执行指令时使用step out,否则将导致运算符重写和函数调用。我更新了我的答案,可能缺少一部分:调试模式此逐步方法非常有效!我只是没有完全理解大家刚才说的话。同样,通过遵循路径,我的代码问题正是我所期望的,但由于大家的帮助,我可以正确使用我的调试器!谢谢大家!