最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決vscode下調(diào)試c/c++程序一閃而過(guò)的問(wèn)題(Windows)

 更新時(shí)間:2020年08月07日 08:59:18   作者:張麥麥啊  
這篇文章主要介紹了解決vscode下調(diào)試c/c++程序一閃而過(guò)(Windows),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

起因

開(kāi)始學(xué)習(xí)c語(yǔ)言了,一開(kāi)始想的就是直接裝個(gè)VS就完了,但是一搜都是說(shuō)vs臃腫啥啥不好,不如用vscode來(lái)整,多輕量~于是就網(wǎng)上搜了許多教程開(kāi)整了,期間也遇到了一些常見(jiàn)的坑,這些集中寫(xiě)個(gè)文,希望可以幫助到大家。配置文件也是來(lái)自其他文章的,我也進(jìn)行了部分修改,后面會(huì)標(biāo)出。

解決方法

我們知道使用vscode對(duì)c/c++進(jìn)行調(diào)試的本質(zhì)是這樣的——1.GCC編譯代碼,2.vscode運(yùn)行編譯出的程序。因此調(diào)試運(yùn)行程序一閃而過(guò)的本質(zhì)就是命令行程序運(yùn)行完結(jié)果直接自動(dòng)關(guān)閉了,這和c/c++程序本身也有關(guān)系。
所以對(duì)于這種問(wèn)題,我們可以很自然而然的想到兩種解決方法:

A.在控制臺(tái)中直接運(yùn)行該程序原理:

我們直接打開(kāi)cmd/powershell等,輸入對(duì)應(yīng)程序的地址,運(yùn)行即可。我們不想讓他一閃而過(guò)的原因是我們需要看到輸出結(jié)果,而不是程序單純的運(yùn)行一下就完事兒了,因此這樣就行了,但是每次都打開(kāi)cmd似乎也太麻煩了,因此我們也可以在vscode上實(shí)現(xiàn)這個(gè)功能。
前面說(shuō)過(guò)一般我們用vscode調(diào)試c/c++的過(guò)程,這里細(xì)化一下,大概是這樣的:vscode先從launch.json中根據(jù)啟動(dòng)參數(shù)進(jìn)行調(diào)試,其中我們配置了preLaunchTask這個(gè)參數(shù)調(diào)用task.json中的任務(wù),一般在task.json中配置一個(gè)任務(wù)調(diào)用gcc進(jìn)行編譯。
因此我們只需要在launch中配置一個(gè)cmd程序來(lái)打開(kāi)我們task.json中任務(wù)編譯的結(jié)果就可以了,但是這種調(diào)用下還是會(huì)出現(xiàn)閃退的問(wèn)題,因此我們補(bǔ)充一個(gè)pause指令;同時(shí)也發(fā)現(xiàn)了另一個(gè)問(wèn)題,pause指令的”按任意鍵繼續(xù)……”并沒(méi)用自動(dòng)換行,反而和輸出內(nèi)容在一起,于是我們?cè)谘a(bǔ)充一個(gè)“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中的任務(wù)名
      "args": [
        "/C",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "&",
        "echo.",
        "&",
        "pause"
      ],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole":true
    }
      ]

    }
  ]
}

需要說(shuō)明的是,這并不是一個(gè)完美的解決方案,在這種情況下斷點(diǎn)調(diào)試是沒(méi)用的。

B.添加一些代碼實(shí)現(xiàn)解決方法

a.程序結(jié)尾處加getchar();一個(gè)不行(比如前面有scanf之類(lèi)的函數(shù)使用,就會(huì)在緩沖區(qū)讀取字符,結(jié)果還是會(huì)自動(dòng)關(guān)閉)就加倆,倆不行就……
b.先清除緩沖區(qū),再getchar();

while(getchar()!='\n') //這兩句代碼是清空輸入緩沖區(qū)內(nèi)容,等同于fflush(stdin);
 continue;
getchar();

c.方法A中的原理一樣,只不過(guò)改成了在程序本身執(zhí)行。

#include <stdlib.h>
system("pause");

C.在代碼結(jié)尾處添加斷點(diǎn)

前面我們說(shuō)了,方法A中并不能使用調(diào)試功能。而在你能正常使用調(diào)試功能的前提下,可以直接在代碼結(jié)尾處斷點(diǎn)解決。

寫(xiě)在最后

需要說(shuō)明的是,除了你代碼中解決閃退問(wèn)題,否則如果你直接打開(kāi)編譯完的exe,大概率也會(huì)直接閃退。以上內(nèi)容是在windows環(huán)境下的,其他系統(tǒng)可能略有差異。
我個(gè)人而言,我更喜歡方法A,但是需要調(diào)試的場(chǎng)景下,我則切換到普通的啟動(dòng)方式通過(guò)斷點(diǎn)來(lái)解決這個(gè)問(wèn)題。
最后提供我的兩份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相對(duì)應(yīng)
      "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"http://解決中文亂碼
      ]
    }
  ],
  "presentation": {
    "echo": true,
    "reveal": "always",
    "focus": false,
    "panel": "shared", 
    "showReuseMessage": true,
    "clear": false
  }
}

如果你需要更詳細(xì)的安裝教程,csdn上已經(jīng)有很多完整的文章了,這里我就不多贅述了。
以下是參考到的資料,實(shí)際上還有更多,但是已經(jīng)無(wú)法一一標(biāo)注了,如果有任何問(wèn)題歡迎直接聯(lián)系我。

參考資料:
https://bs.csdn.net/topics/370159790
https://blog.csdn.net/weixin_43434136/article/details/106884469

(悄咪咪問(wèn)下我的"externalConsole": true關(guān)掉后在內(nèi)置的powershell中打開(kāi)并沒(méi)有輸出也不能輸入,google后好像發(fā)現(xiàn)是本身的一個(gè)bug? ps英文輸入法下也是如此,有的人說(shuō)是中文輸入法。不知道有沒(méi)有大神有方法解決。。。)

到此這篇關(guān)于解決vscode下調(diào)試c/c++程序一閃而過(guò)(Windows)的文章就介紹到這了,更多相關(guān)vscode調(diào)試c/c++程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將CString字符串輸入轉(zhuǎn)化成整數(shù)的實(shí)現(xiàn)方法

    將CString字符串輸入轉(zhuǎn)化成整數(shù)的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇將CString字符串輸入轉(zhuǎn)化成整數(shù)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • C語(yǔ)言 structural body結(jié)構(gòu)體詳解用法

    C語(yǔ)言 structural body結(jié)構(gòu)體詳解用法

    C 數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類(lèi)型,它允許您存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng),結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書(shū)館中書(shū)本的動(dòng)態(tài),您可能需要跟蹤每本書(shū)的下列屬性
    2021-10-10
  • C++深入刨析muduo中的抽象類(lèi)Poller

    C++深入刨析muduo中的抽象類(lèi)Poller

    muduo網(wǎng)絡(luò)庫(kù)中Poller類(lèi)是一個(gè)抽象類(lèi),用戶使用PollPoller或者EPollPoller類(lèi),下面跟隨小編一起來(lái)詳細(xì)了解一下
    2022-04-04
  • C語(yǔ)言實(shí)例之雙向鏈表增刪改查

    C語(yǔ)言實(shí)例之雙向鏈表增刪改查

    雙向鏈表(Doubly Linked List)是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),在單鏈表的基礎(chǔ)上增加了向前遍歷的功能,與單向鏈表不同,雙向鏈表的每個(gè)節(jié)點(diǎn)除了包含指向下一個(gè)節(jié)點(diǎn)的指針外,還包含指向前一個(gè)節(jié)點(diǎn)的指針,本文給大家介紹了C語(yǔ)言中雙向鏈表的增刪改查
    2023-08-08
  • Linux系統(tǒng)下如何使用C++解析json文件詳解

    Linux系統(tǒng)下如何使用C++解析json文件詳解

    JSON(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下如何使用C++解析json文件的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • QT實(shí)現(xiàn)秒表項(xiàng)目

    QT實(shí)現(xiàn)秒表項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)秒表項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼

    C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C語(yǔ)言版掃雷小游戲

    C語(yǔ)言版掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版的掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • c++動(dòng)態(tài)規(guī)劃經(jīng)典算法

    c++動(dòng)態(tài)規(guī)劃經(jīng)典算法

    動(dòng)態(tài)規(guī)劃算法通常用于求解具有某種最優(yōu)性質(zhì)的問(wèn)題。本文主要介紹了c++動(dòng)態(tài)規(guī)劃經(jīng)典算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語(yǔ)言實(shí)現(xiàn)隨機(jī)搶紅包功能

    C語(yǔ)言實(shí)現(xiàn)隨機(jī)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)隨機(jī)搶紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論

八宿县| 房山区| 阿鲁科尔沁旗| 佳木斯市| 类乌齐县| 葫芦岛市| 丰台区| 扬州市| 五河县| 柞水县| 宁波市| 正蓝旗| 贺兰县| 永定县| 襄汾县| 尼木县| 六安市| 廉江市| 保定市| 沧源| 五大连池市| 兴化市| 巴楚县| 桃源县| 武清区| 鹤峰县| 手机| 灵宝市| 临颍县| 临沧市| 赤峰市| 芜湖市| 岫岩| 永和县| 方山县| 大同市| 安平县| 铜山县| 武夷山市| 阿勒泰市| 大宁县|