Visual Studio Code如何在调试时使用输入文本文件

13

我正在尝试按照这篇文章的指示操作:

Visual Studio Code redirect input on debug

但是当我将控制台配置添加到launch.json文件中后,

"console": "integratedTerminal"

出现了“属性控制台不允许”的错误。当我调试程序时,它仍然等待输入,永远达不到断点,就像在shell中启动一样。

"./a.out 1 test1.txt"

"./a.out 1 <test1.txt"    

Full config

{
    "version": "0.2.0",
    "configurations": [

    {
        "name": "(lldb) Launch",
        "type": "cppdbg",
        "request": "launch",
        //"program": "${workspaceRoot}/a.out.dSYM/Contents/Resources/DWARF/a.out",
        "program": "${workspaceRoot}/a.out",
        "args": ["1", "<","test1.txt"],
        "stopAtEntry": false,
        "cwd": "${workspaceRoot}/",
        "environment": [],
        "externalConsole": true,
        "MIMode": "lldb",
        //"miDebuggerPath": "C:\\mingw\\bin\\gdb.exe",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
        "console": "integratedTerminal"
        //"preLaunchTask": //"build test1"
    }
]

}


"./a.out 1 <test1.txt" 在主要文章中发布时可能会被截断。 - echo
如果有人能向我展示如何在shell中启动cpp程序,然后在vscode中附加我的lldb调试器,那也可以,谢谢。 - echo
经过一个月的研究,目前似乎没有办法在LLDB调试器中使用Cpp实现此功能。但是有一种Node的解决方法,如问题所列。https://dev59.com/gVwY5IYBdhLWcg3wPFmo - echo
2个回答

10

我使用 GDB 替代 lldb,但仍然遇到了相同的问题。当我按以下方式在 "launch.json" 文件中输入参数时,它会等待一个输入:

"args": ["<", "test1.txt"],

但是当我按照以下方式重新编写代码后,它开始正常工作:
"args": ["<", "${workspaceFolder}/test1.txt"],

我认为即使输入文件在工作区文件夹中,也应该添加一个父文件夹,或者直接使用完整路径。

你拯救了我的理智!第一次在 VSCode 调试... 在 Linux 上兼容 GDB 并将文件发送到标准输入... 天哪... 我还尝试了一些建议,比如使用外部文件,在其中输入 "r < /path/to/file.txt" ,并将其作为参数放入 GDB 中,但在 VSCode 的 launch.json 中这也没用(对我来说)。最终,谢谢你!!!:D - Dalton
@Dalton,你能在哪里看到输出?如果externalConsole为true时,它是否有效? - beta_me me_beta
"args": ["<", "${workspaceFolder}/test1.txt"] and externalConsole: true not working for mac vscode. Console output: zsh: no such file or directory: /correct/path/to/my/file/input.txt - Kuznetsov-M

2
如果您使用集成控制台,<不会被shell解释。通常使用 externalConsole: true 可以解决这个问题,因为它使用一个shell。但是如果由于某种原因外部控制台在您的系统上无法工作,并且您被迫使用 externalConsole: false,则解决方法是让GDB创建shell:miDebuggerArgs: "'-ex' 'run < /path/to/test1.txt'"

在集成的控制台/终端中,对我来说很好用。你用的是什么操作系统? - undefined
据我记得,这是在Ubuntu 20.04上发生的。不过,这是一段时间前的事了,所以我不记得具体的重现步骤。 - undefined
那么,您现在无法再次复现您之前在新设置中观察到的行为了吗?如果是这样,那么您现在观察到的行为是什么? - undefined
我不记得在哪里遇到这个问题了。目前我的配置中没有这个字符串。抱歉。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接