c语言程序运行时调试秒退,解决vscode下调试c/c++程序一闪而过的问题(Windows)...

起因

开始学习c语言了,一开始想的就是直接装个VS就完了,但是一搜都是说vs臃肿啥啥不好,不如用vscode来整,多轻量~于是就网上搜了许多教程开整了,期间也遇到了一些常见的坑,这些集中写个文,希望可以帮助到大家。配置文件也是来自其他文章的,我也进行了部分修改,后面会标出。

解决方法

我们知道使用vscode对c/c++进行调试的本质是这样的——1.GCC编译代码,2.vscode运行编译出的程序。因此调试运行程序一闪而过的本质就是命令行程序运行完结果直接自动关闭了,这和c/c++程序本身也有关系。

所以对于这种问题,我们可以很自然而然的想到两种解决方法:

A.在控制台中直接运行该程序原理:

我们直接打开cmd/powershell等,输入对应程序的地址,运行即可。我们不想让他一闪而过的原因是我们需要看到输出结果,而不是程序单纯的运行一下就完事儿了,因此这样就行了,但是每次都打开cmd似乎也太麻烦了,因此我们也可以在vscode上实现这个功能。

前面说过一般我们用vscode调试c/c++的过程,这里细化一下,大概是这样的:vscode先从launch.json中根据启动参数进行调试,其中我们配置了preLaunchTask这个参数调用task.json中的任务,一般在task.json中配置一个任务调用gcc进行编译。

因此我们只需要在launch中配置一个cmd程序来打开我们task.json中任务编译的结果就可以了,但是这种调用下还是会出现闪退的问题,因此我们补充一个pause指令;同时也发现了另一个问题,pause指令的”按任意键继续……”并没用自动换行,反而和输出内容在一起,于是我们在补充一个“echo.”用作换行符。

因此我们完整的指令是这样的

/C yourprogram.exe

echo.

pause

解决方法:

如果放到launch.json文件中则是这样的。

{

"version": "0.2.0",

"configurations": [

{

"name": "(Windows) Launch",

"type": "cppvsdbg",

"request": "launch",

"program": "cmd",

"preLaunchTask": "echo",//这里需要换成你task.json中的任务名

"args": [

"/C",

"${fileDirname}\\${fileBasenameNoExtension}.exe",

"&",

"echo.",

"&",

"pause"

],

"stopAtEntry": false,

"cwd": "${workspaceFolder}",

"environment": [],

"externalConsole":true

}

]

}

]

}

需要说明的是,这并不是一个完美的解决方案,在这种情况下断点调试是没用的。

B.添加一些代码实现解决方法

a.程序结尾处加getchar();一个不行(比如前面有scanf之类的函数使用,就会在缓冲区读取字符,结果还是会自动关闭)就加俩,俩不行就……

b.先清除缓冲区,再getchar();

while(getchar()!='\n') //这两句代码是清空输入缓冲区内容,等同于fflush(stdin);

continue;

getchar();

c.方法A中的原理一样,只不过改成了在程序本身执行。

#include

system("pause");

C.在代码结尾处添加断点

前面我们说了,方法A中并不能使用调试功能。而在你能正常使用调试功能的前提下,可以直接在代码结尾处断点解决。

写在最后

需要说明的是,除了你代码中解决闪退问题,否则如果你直接打开编译完的exe,大概率也会直接闪退。以上内容是在windows环境下的,其他系统可能略有差异。

我个人而言,我更喜欢方法A,但是需要调试的场景下,我则切换到普通的启动方式通过断点来解决这个问题。

最后提供我的两份json文件以供各位参考:

launch.json:

{

"version": "0.2.0",

"configurations": [

{

"name": "(Windows) Launch",

"type": "cppvsdbg",

"request": "launch",

"program": "cmd",

"preLaunchTask": "echo",

"args": [

"/C",

"${fileDirname}\\${fileBasenameNoExtension}.exe",

"&",

"echo.",

"&",

"pause"

],

"stopAtEntry": false,

"cwd": "${workspaceFolder}",

"environment": [],

"externalConsole":true

},

{

"name": "(gdb) Launch",

"type": "cppdbg",

"request": "launch",

"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",

"args": [],

"stopAtEntry": false,

"cwd": "${workspaceFolder}",

"environment": [],

"externalConsole": true,

"MIMode": "gdb",

"miDebuggerPath": "F:\\mingw\\bin\\gdb.exe",// 自己电脑的gdb

"preLaunchTask": "echo",//这里和task.json的label相对应

"setupCommands": [

{

"description": "Enable pretty-printing for gdb",

"text": "-enable-pretty-printing",

"ignoreFailures": true

}

]

}

]

}

task.json

{

// See https://go.microsoft.com/fwlink/?LinkId=733558

// for the documentation about the tasks.json format

"version": "2.0.0",

"tasks": [

{

"label": "echo",

"type": "shell",

"command": "gcc",

"args": [

"-g",

"${file}",

"-o",

"${fileBasenameNoExtension}.exe",

"-fexec-charset=GBK"//解决中文乱码

]

}

],

"presentation": {

"echo": true,

"reveal": "always",

"focus": false,

"panel": "shared",

"showReuseMessage": true,

"clear": false

}

}

如果你需要更详细的安装教程,csdn上已经有很多完整的文章了,这里我就不多赘述了。

以下是参考到的资料,实际上还有更多,但是已经无法一一标注了,如果有任何问题欢迎直接联系我。

参考资料:

https://bs.csdn.net/topics/370159790

https://blog.csdn.net/weixin_43434136/article/details/106884469

(悄咪咪问下我的"externalConsole": true关掉后在内置的powershell中打开并没有输出也不能输入,google后好像发现是本身的一个bug? ps英文输入法下也是如此,有的人说是中文输入法。不知道有没有大神有方法解决。。。)

到此这篇关于解决vscode下调试c/c++程序一闪而过(Windows)的文章就介绍到这了,更多相关vscode调试c/c++程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VSCode是一款轻量级的集成开发环境(IDE),通常用于开发多种编程语言,包括C语言。然而,有在VSCode中运行C语言程序会出现一而过的情况。 这是因为在Windows操作系统中,C语言程序在命令行窗口中运行。当我们在VSCode中点击运行按钮或者使用快捷键运行C语言程序,VSCode会打开一个命令行窗口并临执行相关命令进行编译和运行。 一而过的现象发生是因为程序很快执行完毕并关闭了命令行窗口,导致我们无法看到程序的输出结果。这对于一些简单的程序可能不会构成问题,但对于复杂的程序或需要观察输出结果的情况下则不太方便。 为了解决这个问题,我们可以在运行C语言程序加入一个暂停命令,使命令行窗口保持打开状态。具体方法是,在设置文件中添加以下配置: ```json "runInTerminal": true, "externalConsole": false, ``` 这样配置后,我们再次运行C语言程序,命令行窗口将保持打开状态,并暂停程序运行,直到我们按下任意键才会关闭。 除此之外,我们也可以在代码中加入适当的输入等待或延语句,使程序运行完毕后停留在命令行窗口,以便我们查看输出结果。 总的来说,VSCode运行C语言而过的问题可以通过以上两种方法解决。这样我们就能够在VSCode中更方便地调试和观察C语言程序运行结果了。 ### 回答2: 当在VSCode中运行C语言程序,出现一而过的情况可能是因为程序执行完毕后终端窗口立即关闭。这种情况通常发生在没有让程序暂停停留在终端窗口的情况下。 为了解决这个问题,可以在程序的末尾添加一个系统指令,以便使程序暂停在终端窗口上。在C语言中,可以使用`system("pause")`来实现这一目的。这将在程序完成执行后,等待用户按下任意键后关闭终端窗口。 以下是添加`system("pause")`的示例代码: ```c #include <stdio.h> int main() { // 主要的程序逻辑 system("pause"); return 0; } ``` 在保存并运行此代码之后,终端窗口将不再一而过,而是等待用户按下任意键后关闭。这样可以方便地查看程序的输出结果。 还有一个替代的方法是在VSCode中自定义任务(tasks),以便在运行C程序后,自动在终端窗口中显示程序的输出结果。通过配置"problemMatcher"属性,可以确保终端窗口在程序执行完毕后仍然保持打开状态。这种方法需要对VSCode的配置有一定了解,但可以实现更加自动化的过程。 综上所述,通过在C语言程序的末尾添加`system("pause")`,或者通过自定义任务在VSCode中保持终端窗口打开,可以解决VSCode运行C语言而过的问题。 ### 回答3: 在VS Code中运行C语言程序,出现一而过的情况可能是因为程序执行速度非常快,导致终端窗口无法及显示结果。这种情况下我们可以通过在代码中添加一段暂停的代码来解决。 在C语言程序的最后,我们可以使用系统命令"system("pause")"来暂停程序的执行,等待用户按下任意键后再关闭窗口。这样就可以让结果在窗口中显示出来,而不会一而过。 下面是一个示例的C语言程序: ```c #include <stdio.h> #include <stdlib.h> int main() { // 在这里编写你的程序代码 system("pause"); // 暂停程序的执行 return 0; } ``` 通过在程序的最后添加`system("pause")`语句,程序会在执行完成后等待用户按下任意键后再关闭终端窗口。这样我们就能够在控制台中看到程序的输出结果,并进行查看和分析。注意,这种方法只适用于Windows系统,不适用于其他操作系统如MacOS或Linux。 另外,如果我们希望程序执行的速度更慢一点,以便能够观察输出结果,我们可以在代码中添加适当的延。例如: ```c #include <stdio.h> #include <stdlib.h> int main() { // 在这里编写你的程序代码 for(int i=0; i<100000000; i++) { // 延 } return 0; } ``` 以上是一些解决VS Code运行C语言程序一而过的方法,可以根据具体情况选择适用的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值