V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CaliInn
V2EX  ›  Visual Studio Code

如何设置 vscode 使得调试 c++程序时不会自动闪退

  •  
  •   CaliInn · 2019-04-18 17:10:49 +08:00 · 10644 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,我是一名初学者,一直使用devcpp来编写程序,在写完程序后按下f11编译并运行程序会在运行完毕后自动暂停(不会闪退的那种),但是在vscode里面怎么也实现不了,就十分痛苦,如果实在不行能够设置为按f5会自动在终端里运行也可。谢谢各位大佬♪(・ω・)ノ

    附图: avatar

    17 条回复    2020-06-25 21:59:37 +08:00
    exch4nge
        1
    exch4nge  
       2019-04-18 17:46:50 +08:00
    main 函数返回那句下断点? 返回前 getchar ?
    CEBBCAT
        2
    CEBBCAT  
       2019-04-18 19:00:09 +08:00 via Android   ❤️ 1
    嘻嘻😁,看来真是初学者。

    为什么有这个问题:程序执行完既定任务后自然而然就关闭了,devcpp 会出一行 pause 是特殊设计的结果。

    有几个解决方案:
    ❶ 试试 Jetbrains 公司的 IDE,有学生版,应该会像 Pycharm 一样提供一个内建 console,程序会在 console 里运行,虽然最后也会结束,但输入输出都在 console 里保留了
    ❷ 程序最后一行加断点
    ❸ 像楼上说的一样,加个 getchar 一般就行了,不行就俩
    ❹ 调用系统的 pause 指令

    加油
    agdhole
        3
    agdhole  
       2019-04-18 19:00:53 +08:00 via Android
    pause
    CaliInn
        4
    CaliInn  
    OP
       2019-04-20 00:22:39 +08:00 via iPhone
    @CEBBCAT 他这个如果不能设置 pause 的话能不能设置为调试的时候自动在终端里运行,这样哪怕是退出了不也能完整的看到结果吗
    CEBBCAT
        5
    CEBBCAT  
       2019-04-20 00:24:35 +08:00
    @CaliInn #4 嗯……看不懂你在说什么
    CaliInn
        6
    CaliInn  
    OP
       2019-04-20 00:25:40 +08:00 via iPhone
    @agdhole 我知道可以单独添加代码来实现,但是每个代码都加这个的话还是有些麻烦,毕竟 devcpp 可以实现这样的功能,我就想着能不能对更“现代化的” vscode 添加一些设置来达到类似的效果
    CaliInn
        7
    CaliInn  
    OP
       2019-04-20 00:27:55 +08:00 via iPhone
    @CEBBCAT 就是他 vscode 里面不是集成了 windows powershell 吗,在那里面运行程序哪怕是退出了不也能看到结果吗,我就寻思着能不能进行一些操作让摁 f5 以后,vscode 会自动让程序在集成的 powershell (终端)中运行,不就算是曲线救国了吗
    CaliInn
        8
    CaliInn  
    OP
       2019-04-20 00:28:48 +08:00 via iPhone
    @CEBBCAT 当然,如果能直接设置达到跟 dev cpp 一样的效果最好(我以前好像见到别人实现过,但再回去找那个帖子就怎么也找不到了)
    CEBBCAT
        9
    CEBBCAT  
       2019-04-20 00:29:39 +08:00
    @CaliInn #6 嗯,现在我明白了,可悲的是我没有使用过 VSCode,所以不知道该怎么为 C 程序设定这样的特性。我搜到一个网页,不知道有没有帮助。
    [Integrated Terminal in Visual Studio Code]( https://code.visualstudio.com/docs/editor/integrated-terminal )
    假若没有必要,我还是推荐使用现代化的 IDE。
    CEBBCAT
        10
    CEBBCAT  
       2019-04-20 00:32:15 +08:00
    @CaliInn #8 运行在内建的 powershell 应该是可行的,我猜只需要修改一些『编译后的指令』就好。但我不知道应该具体怎样做
    CaliInn
        11
    CaliInn  
    OP
       2019-04-20 00:35:15 +08:00 via iPhone
    @CEBBCAT 哈哈,我以前只浏览了关于 cpp 编译环境的官方指南,倒还没看过这个。不过你推荐的“现代化的 ide 是指哪些”,我感觉 vscode 应该算是一个吧( sublimetext 算吗)
    CEBBCAT
        12
    CEBBCAT  
       2019-04-20 01:02:51 +08:00   ❤️ 1
    @CaliInn #11 哈哈,你还是需要学会 Google 啊,这个问题留给你当作课后作业吧。送给你一个链接:

    [使用 VS Code 搭建适用于 ACM 练习的 C/C++ 开发环境 - Blessing Studio]( https://blessing.studio/vscode-c-cpp-configuration-for-acm-oj/ )
    CaliInn
        13
    CaliInn  
    OP
       2019-04-20 10:32:56 +08:00
    @CEBBCAT 昨天回复限制触顶了,没回复成功哈哈,不过我感觉这个链接应该就是我想要的!(最近正有在算法竞赛方面进修的意思!)
    Ouepent
        14
    Ouepent  
       2019-09-13 23:34:37 +08:00
    @CaliInn

    我的解决方法是:
    launch.json 下 program 修改为 cmd
    args 添加 "/K", "${fileDirname}/${fileBasenameNoExtension}.exe"

    代码:
    {
    "name": "(Windows) Launch",
    "program": "cmd",
    "args": [
    "/K",
    "${fileDirname}/${fileBasenameNoExtension}.exe"
    ],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole":true
    },
    然后在调试界面选择 (Windows) Launch 按 F5 运行即可 ...

    原理:
    通过 cmd 的参数 "/K" 来实现
    意思是: 是执行完命令后不关闭命令窗口
    Ouepent
        15
    Ouepent  
       2019-09-13 23:39:28 +08:00
    @Ouepent
    添加:
    {
    "name": "(Windows) Launch",
    "type": "cppvsdbg",
    "request": "launch",
    "program": "cmd",
    "args": [
    "/K",
    "${fileDirname}\\${fileBasenameNoExtension}.exe",
    ],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole":true
    },
    测试通过
    Ouepent
        16
    Ouepent  
       2019-09-13 23:43:41 +08:00 via Android
    或者 args 添加 "/C", "${fileDirname}/${fileBasenameNoExtension}.exe", "&", "pause"

    ps:这种方法 pause 不会回车执行 ....
    max3
        17
    max3  
       2020-06-25 21:59:37 +08:00
    @Ouepent 也尝试改成 cmd 了,但是似乎这样调试功能就废了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2935 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:51 · PVG 22:51 · LAX 06:51 · JFK 09:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.