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

2019-04-18 17:10:49 +08:00
 CaliInn

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

附图:

10645 次点击
所在节点    Visual Studio Code
17 条回复
exch4nge
2019-04-18 17:46:50 +08:00
main 函数返回那句下断点? 返回前 getchar ?
CEBBCAT
2019-04-18 19:00:09 +08:00
嘻嘻😁,看来真是初学者。

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

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

加油
agdhole
2019-04-18 19:00:53 +08:00
pause
CaliInn
2019-04-20 00:22:39 +08:00
@CEBBCAT 他这个如果不能设置 pause 的话能不能设置为调试的时候自动在终端里运行,这样哪怕是退出了不也能完整的看到结果吗
CEBBCAT
2019-04-20 00:24:35 +08:00
@CaliInn #4 嗯……看不懂你在说什么
CaliInn
2019-04-20 00:25:40 +08:00
@agdhole 我知道可以单独添加代码来实现,但是每个代码都加这个的话还是有些麻烦,毕竟 devcpp 可以实现这样的功能,我就想着能不能对更“现代化的” vscode 添加一些设置来达到类似的效果
CaliInn
2019-04-20 00:27:55 +08:00
@CEBBCAT 就是他 vscode 里面不是集成了 windows powershell 吗,在那里面运行程序哪怕是退出了不也能看到结果吗,我就寻思着能不能进行一些操作让摁 f5 以后,vscode 会自动让程序在集成的 powershell (终端)中运行,不就算是曲线救国了吗
CaliInn
2019-04-20 00:28:48 +08:00
@CEBBCAT 当然,如果能直接设置达到跟 dev cpp 一样的效果最好(我以前好像见到别人实现过,但再回去找那个帖子就怎么也找不到了)
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
2019-04-20 00:32:15 +08:00
@CaliInn #8 运行在内建的 powershell 应该是可行的,我猜只需要修改一些『编译后的指令』就好。但我不知道应该具体怎样做
CaliInn
2019-04-20 00:35:15 +08:00
@CEBBCAT 哈哈,我以前只浏览了关于 cpp 编译环境的官方指南,倒还没看过这个。不过你推荐的“现代化的 ide 是指哪些”,我感觉 vscode 应该算是一个吧( sublimetext 算吗)
CEBBCAT
2019-04-20 01:02:51 +08:00
@CaliInn #11 哈哈,你还是需要学会 Google 啊,这个问题留给你当作课后作业吧。送给你一个链接:

[使用 VS Code 搭建适用于 ACM 练习的 C/C++ 开发环境 - Blessing Studio]( https://blessing.studio/vscode-c-cpp-configuration-for-acm-oj/ )
CaliInn
2019-04-20 10:32:56 +08:00
@CEBBCAT 昨天回复限制触顶了,没回复成功哈哈,不过我感觉这个链接应该就是我想要的!(最近正有在算法竞赛方面进修的意思!)
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
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
2019-09-13 23:43:41 +08:00
或者 args 添加 "/C", "${fileDirname}/${fileBasenameNoExtension}.exe", "&", "pause"

ps:这种方法 pause 不会回车执行 ....
max3
2020-06-25 21:59:37 +08:00
@Ouepent 也尝试改成 cmd 了,但是似乎这样调试功能就废了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/556489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX