解决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 <stdlib.h>
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++程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    我看了网上的大佬们配的我是在是看不懂啊?我是一个小白啊?这太难了,这阻挡不了我,想使用这很骚的IDE,于是在不断的摸索下,终于配置成功,小白们也不用慌,这次非常简单.一定可以的. 1.下载 VS Code 下载网址:https://code.visualstudio.com/ 2.运行安装程序 一定不要忘记把Path那一条点上. 3.装MinGW 当时我下了半天找不到,这次我放个地址,github放不下这么大的文件,传文件夹的话还得ssh啥的,还不会,将就一下https://www.jb51.n

  • Visual Studio Code (vscode) 配置 C / C++ 环境的流程

    昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教程,用了昨天整整一下午的时间最后终于成功了(哈哈哈哈哈--).今天跟大家分享一下~~~ 因为还只是个编程小白,参考资料有点多 ↓ ↓ ↓ 官方文档 -- 参考配置过程CSDN原创文章 -- 参考主要配置过程知乎达人 -- 参考环境准备 ➺➻➸ 主要流程: 1. 下载VScode 2. 安装cpptools工具 3. 下载MinGW 4. 配置环境变量 5. 使用简单的.cpp文件配

  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(主要Windows、简要Linux)

    2020年2月22日更新,又按照自己的帖子尝试了以下,感觉大的思路是没问题的啊,小改动用紫色的标记标注出来了,另外如评论区所说删去了部分旧版本的内容和图片,不知道为啥评论区的留言我都没收到邮件... 现在是2019.7.21,由于这阵一直在忙,今天我用最新的VSCode(Version 1.36.1) 和最新的Cpp插件(version 0.24.0)按照本文的安装步骤从零开始试了一下,由于vscode版本和cpp插件版本更新确实变化了很多,2019年7月21日更新的我会用这个颜色(粉色?)标示

  • VScode编译C++ 头文件显示not found的问题

    一直用codeblocks,想试试vscode,结果这个问题给我弄懵逼了.一开始以为是iostream这个头文件not found,后来发现第一个头文件都会这样显示,放到后面就不会了,然而,光这一个显示not found(虽然并不影响编译),就能逼死强迫症的啊~~~ 言归正传,这个问题解决方法是: 文件--首选项--设置--搜索"clang.diagnostic.enable",然后把勾勾去掉就好了.这是插件C/C++ Clang Command Adapter的一个选项~~ 如果一堆

  • 解决vscode下调试c/c++程序一闪而过的问题(Windows)

    起因 开始学习c语言了,一开始想的就是直接装个VS就完了,但是一搜都是说vs臃肿啥啥不好,不如用vscode来整,多轻量~于是就网上搜了许多教程开整了,期间也遇到了一些常见的坑,这些集中写个文,希望可以帮助到大家.配置文件也是来自其他文章的,我也进行了部分修改,后面会标出. 解决方法 我们知道使用vscode对c/c++进行调试的本质是这样的--1.GCC编译代码,2.vscode运行编译出的程序.因此调试运行程序一闪而过的本质就是命令行程序运行完结果直接自动关闭了,这和c/c++程序本身也有关

  • 解决VScode配置远程调试Linux程序的问题

    下面看下VScode远程调试Linux程序的问题,具体内容如下,一起看看吧! 最近在Linux上调程序,但是gdb使用属于入门阶段,主要是没有图形化界面直观.在网上查找了有两个方案可选,一个是通过VisualStudio2019的远程调试功能,因为最近一直在用VScode,所以没有试,之后有时间了可以试一下.另一个方案就是通过VScode的Remote Development插件(微软官方提供的)进行远程调试.本文介绍下这个方案. 虽然网上也有其他的文章进行介绍,但是都是写的成功的情况,没有写出

  • ros项目调试:vscode下配置开发ROS项目的详细教程

    引言 在vscode下面配置用于ROS项目开发的环境 包括头文件目录的配置,catkin_make命令的配置,GDB debug的配置,以及ROS插件. vscode头文件目录配置安装"c/c++"插件 到vscode左边栏的EXTENSIONS中,搜索"C/C++"并安装 生成c_cpp_properties.json vscode自身配置文件全部在./.vscode/目录下 但是,在最开始对自己新建的目录和文件进行编辑后,文件夹里面是没有.vscode目录的 同

  • VSCode下配置python调试运行环境的方法

    VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在VSCode市场中安装Python插件 * 4.在用户设置里加两条 * 5.接下来是正式的调试了 1080 两个数的平方和 Input Output Input示例 Output示例 1.下载python解释器 python 3.6.3 for windows 安装到系统某个路径例如C:\Python36 最好添加到Path,也可以不加 2.在VS

  • 解决Ubuntu下使用linuxdeployqt打包Qt程序问题

    写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打包. 1. 配置Qt环境 首先,我们先把Qt环境配置好,在~/.bashrc中加入: export PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/bin:$PATH export LD_LIBRARY_PATH=/home/xl/Qt5.9.2/5.9.2/gcc_64/li

  • 使用VSCode开发和调试.NET Core程序的方法

    电脑不想装几十个G的 VS2017,那就用 VS Code 吧 目标: 创建一个类库项目 Skany.Core,并用 Nuget 引用第三方组件 Hash 实现加密算法 创建一个单元测试项目 Skany.Tests,引用类库 Skany.Core,并测试其中的方法 创建一个控制台应用程序项目 Skany.Output,引用类库 Skany.Core,并输出方法执行结果 创建一个解决方案 Skany.sln,包括以上三项目 环境 .NET Core SDK 2.2.202 开始 首先在 VS Co

  • vscode 远程调试python的方法

    本文介绍了vscode 远程调试python的方法,分享给大家,具有如下: 实验环境 远程服务器:京东云,1核2G,centos7.3 64bit 本地环境配置 安装vscode,实验用的版本是1.10.2 vscode配置python插件,实验用的python插件版本是0.7.0 vscode配置python远程调试环境 在.vscode文件夹新建一个launch.json文件,然后填写下面的代码 { "version": "0.2.0", "confi

  • VScode编写第一个Python程序HelloWorld步骤

    一.软件下载与安装 VScode下载地址:https://code.visualstudio.com/ VScode的github项目地址(本文用不到):https://github.com/microsoft/vscode Python下载地址:https://www.python.org/downloads/ 笔者用的是win版的VScode1.0和32位Python2.7,安装Python时注意将Python添加到系统环境变量 二.VScode项目结构简介 VScode使用的是文件夹命名的

  • 解决vscode python print 输出窗口中文乱码的问题

    一.搭建 python 环境 在 VSC 中点击 F1 键,弹出控制台,输入 ext install 界面左侧弹出扩展窗格,输入python,确认,开始搜索 下载发布者为Don Jayamanne 的 Python 插件 (下载过程中不要切换窗口,不要做其他任何操作,否则会中断下载,下载时间略长,耐心等待) 安装完毕 "文件"-"首选项"-"用户设置",打开用户配置文件settings.json,再其中大括号内输入计算机中 python.exe

  • Angular2使用vscode断点调试ts文件的方法

    VSCode自带debugger工具,管理后台项目使用angular2,试了下调试ts文件十分方便.下面是具体的实现步骤以及踩的坑.当你调试出来后,回头看这个设置还是十分简单的.我使用的是ng-cli创建的项目.后面再补充一般项目的调试,感觉也差不多. 解决了 "由于未找到生成的代码,已忽略断点(是否是源映射问题?) " ,参考下面的 我的环境配置 我的环境配置 1. node v7.3.0 2. npm 3.10.10 3. ng >= 1.3 // 这一点非常重要,我一开始的

随机推荐