V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leverestfish
V2EX  ›  程序员

[急求] VSCode 调试 C++ 如何实现输入重定向

  •  
  •   leverestfish · 2023-01-24 18:14:09 +08:00 · 1957 次点击
    这是一个创建于 680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    明天要考试了,紧急来问一下:

    • 实现输入重定向(类似于 CLion 那样)

      • 经过测试发现 launch.json 里面 args 字段添加两个参数的方法 < test.input 是不行的
    • 使用场景限制,必须要用 VSCode

    • 只使用 Microsoft 官方的那个 C/C++ 插件

    • 编译通过运行 Makefile 手动执行

    • 另外,在 macOS 上如果 debug 选择 external terminal 为 false 时( VS Code 内置的 terminal )似乎是完全没办法进行手动输入,其他操作系统不清楚

    搜遍全网似乎没看到好的方案,不理解为什么 VSCode 在 C++ 有输入的情况下调试这方面支持做的这么差,如果有完整的使用 VSCode 优雅调试 C++ 的文档请分享一下~

    提前感谢各位大佬!

    10 条回复    2023-01-24 23:59:06 +08:00
    iOCZ
        1
    iOCZ  
       2023-01-24 18:28:15 +08:00   ❤️ 2
    我用 code runner 调试 c++
    kkocdko
        2
    kkocdko  
       2023-01-24 18:30:26 +08:00 via Android   ❤️ 1
    是类似刷算法题做 stdin 重定向么,和 c 一样用 fopen 就行,或者只用 cin 然后这么写
    https://kkocdko.site/post/202201130103#redirect-cin

    另外这和 vscode 半毛钱关系没有,我们不能要求一个服务无数开发者的通用软件专为自己的需求量身定制。
    ysc3839
        3
    ysc3839  
       2023-01-24 19:31:48 +08:00 via Android   ❤️ 1
    vvhy
        4
    vvhy  
       2023-01-24 19:49:31 +08:00   ❤️ 1
    <test.input 中间不要空格。
    有空格需要写成两个字符串,是有点奇怪。tasks.json 里之前也是,现在已经可以全部写到 command 里。不过 launch.json 还没改。
    learningman
        5
    learningman  
       2023-01-24 20:17:40 +08:00   ❤️ 1
    learningman
        6
    learningman  
       2023-01-24 20:18:25 +08:00   ❤️ 1
    原理就是 gcc 通过参数定义一个宏,然后 ifdef freopen
    DeltaC
        7
    DeltaC  
       2023-01-24 20:20:34 +08:00   ❤️ 1
    1.输入重定向,是 shell 干的活,你不能对调试器要求太多。
    2.二楼是正解

    ```c

    #ifdef _DEBUG_
    freopen("test.input", "r", stdin)
    #endif
    ```
    3."debug 选择 external terminal 为 false 时",我这里( arch/win )是可以输入的。反倒是 code runner 要是不开 external terminal ,没法输入。
    leverestfish
        8
    leverestfish  
    OP
       2023-01-24 22:10:17 +08:00
    感谢大家回复,可以理解不能对 vs code 要求太多,但是人家 CLion 毕竟是实现了这个(对我来说)很方便的功能所以奢求一下

    #2 #7 的回复确实是最方便的解决办法了,感谢!

    @vvhy 您的意思是不要空格就能通过 args 来实现输入了?
    leverestfish
        9
    leverestfish  
    OP
       2023-01-24 22:11:25 +08:00
    @ysc3839 这个我搜到过,不行的,debug 的时候没有输入进去
    vvhy
        10
    vvhy  
       2023-01-24 23:59:06 +08:00
    #8 我试了"args": ["< test.input"]不行,但是["<test.input"]或者 ["<","test.input"]都可以
    还是用楼上的解决方法更好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:57 · PVG 18:57 · LAX 02:57 · JFK 05:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.