【问题标题】:How to read input when debugging in C++ in Visual Studio Code?在 Visual Studio Code 中使用 C++ 进行调试时如何读取输入?
【发布时间】:2019-08-14 12:35:52
【问题描述】:

我正在使用 VSCode 在 MacOSX 中调试我的 CPP 程序。

我有 2 个程序。

程序1

int main(){

    string a;
    a = "a";
    a += 'b';
    cout<<a<<endl;
    return 0;
}

程序2

int main(){

    string a;
    cin>>a;
    a += 'b'
    cout<<a;
    return 0;
}

在program1中,我直接分配string a,当我在VSCode中调试程序时,首先在终端中使用:

g++ -g filename.cpp

然后选择调试菜单中的开始调试选项。通过在断点中前进,我可以看到 string a 变量的状态。

VARIABLES 部分显示不同变量的状态,CALL STACK 显示堆栈帧。

但是,对于 program2,当我越过 cin&gt;&gt;a; 的断点时,VARIABLES 和 CALL STACK 的内容得到清理了。

这是launch.json文件的内容:

{
    "version": "0.2.0",
    "configurations": [    
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb"
        }
    ]
}

如何获取用户输入并继续调试我的代码?

【问题讨论】:

  • 不确定 VSCode 是否相同,但在 VS 中,当您在调试器中跳过输入时,您可以切换到控制台窗口并输入输入,按 Enter,然后返回单步执行代码。
  • @Jos 为该语句添加一个断点 a += 'b'
  • @VladfromMoscow 是的,我这样做了,调试在那里暂停。我在哪里可以提供我的意见?
  • @Jos 使用控制台窗口。
  • @VladfromMoscow 这和Terminal 或Debug Console 一样吗?我的意思是,那个礼物在哪里?

标签: c++ visual-studio-code


【解决方案1】:

如Here中所述

如果您在 launch.json 中启用 "externalConsole":true,那么您会弹出一个控制台窗口供您输入。

【讨论】:

  • 这似乎不适用于来自标准输入的管道输入,例如./program &lt; input.txt。有替代方案吗?
  • 事实证明,如果你把“
  • 遗憾的是,这不是我的选择。调试器永远不会启动。同stackoverflow.com/questions/53108690/…
【解决方案2】:

要使用输入进行调试,您可以编辑 arg 部分,如下所示:

"program": "${workspaceFolder}/main",
"args": ["<", "input_file.in"]

上面的例子应该是一样的:./main &lt; input_file.in

【讨论】:

    【解决方案3】:

    我希望这对来到这里的任何人都有帮助:

    通过 (1) 将“externalConsole”设置为 true 和 (2) 在 Code-Runner Extension 配置中检查(启用)“Run In Terminal”,您可以通过在运行代码时会弹出的外部控制台。

    【讨论】:

      【解决方案4】:

      简单地说:-
      第1步。单击调试器窗口的小齿轮图标。
      第2步。在 launch.json 文件中将此 ["externalConsole": false,] 设为 "true"。
      第三步。然后重启你的调试器。

      【讨论】:

        【解决方案5】:

        我也遇到了同样的问题,我的解决方法是把cygwin的gdb和g++换成mingw64的。

        【讨论】:

          【解决方案6】:

          就我而言,这是一个两步过程。

          1. 启用 externalConsole:true,如其他响应中所述。
          2. Let VS code control the terminal.

          【讨论】:

            猜你喜欢
            • 2019-10-31
            • 2018-12-09
            • 2020-01-16
            • 1970-01-01
            • 1970-01-01
            • 2016-11-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多